In gnu make, can the prerequisites in a static pattern rule have different suffixes

后端 未结 3 954
青春惊慌失措
青春惊慌失措 2021-01-18 04:45

Our make file compiles .c source files with a static pattern rule like this:

OBJECTS = foo.o bar.o baz.o

$(OBJECTS): %.o: %.c
    $(CC) $< $(C_OPTIONS) -         


        
3条回答
  •  被撕碎了的回忆
    2021-01-18 05:11

    The call to the same compiler is just a happy occasion. Normally you do not compile objective-c code with $(CC). That just feels strange.

    But since you go in a harsh way, I won't post do-it-right solution, where you separate objective-C targets from C targets into two different $(OBJECTS)-like variables and make two rules (which you should really do). Too boring. Instead, take a hack!

    OBJC_FILES:=$(subst $(wildcard *.m))
    
    real_name = `(test -h $(1) && readlink $(1) ) || echo $(1)`
    
    $(OBJECTS): %.o: %.c
      $(GCC) $< $(C_OPTIONS) -c -o $(call real_name,$@)
    
    $(OBJC_FILES): %.c: %.m
      ln -s $< $@
    

    And God help those who maintains it!

    Btw, this obviously won't work if your m-files are generated.

提交回复
热议问题