如何为特定文件添加不同的规则?

时间:2011-07-01 09:34:09

标签: makefile

我的Makefile遇到了一些问题。

使用此命令,我可以将我的所有* .c文件编译为* .o,效果很好:

$(OBJ) : %.o : %.c $(LDSCRIPT) Makefile
    $(CC) $(ARM9_INCLUDES) -c $(CFLAGS) $< -o $@

但现在我想知道,如果我想在一个特定文件上运行-O3优化,并在其余文件上有-O0该怎么办?

是否有任何命令为特定文件添加不同的规则?

我现在正在做的是用自己的规则编译每个C文件,这非常烦人,因为我有大约30个文件,这使得Makefile 巨大,每次我改变一些东西一个文件再次编译所有内容。

2 个答案:

答案 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