我的Makefile遇到了一些问题。
使用此命令,我可以将我的所有* .c文件编译为* .o,效果很好:
$(OBJ) : %.o : %.c $(LDSCRIPT) Makefile
$(CC) $(ARM9_INCLUDES) -c $(CFLAGS) $< -o $@
但现在我想知道,如果我想在一个特定文件上运行-O3
优化,并在其余文件上有-O0
该怎么办?
是否有任何命令为特定文件添加不同的规则?
我现在正在做的是用自己的规则编译每个C文件,这非常烦人,因为我有大约30个文件,这使得Makefile 巨大,每次我改变一些东西一个文件再次编译所有内容。
答案 0 :(得分:13)
particular_file.o : CFLAGS+=-O3
(假设是GNU make)请参阅GNU Make手册中的target-specific variable values (以及紧随其后的特定于模式的变量值)。
另请注意,该命令是针对给定文件的最具体规则使用的,因此您可以拥有特定于目标的变量值:
particular_file.o : particular_file.c
completely_special_compiler -o $@ $<
%.o : %.c
$(CC) $(CFLAGS) -o $@ $<
答案 1 :(得分:3)
可以使解决方案更具可扩展性。
假设您需要以一种方式编译一组文件而另一种方式编译另一组文件,而不是只有一个例外,并且您可以识别这两组文件中的模式,例如:一组以“a”开头,另一组以“b”开头,你可以这样做:
a%.o : a%.c
completely_special_compiler -o $@ $<
b%.o : b%.c
$(CC) $(CFLAGS) -o $@ $<
有关详细说明,请参阅Static Patterns。