编译源的子集时应用不同的标志



我的项目中有两组源文件,我需要从中生成目标文件。

SET_ONE = foo.o bar.o
SET_TWO = zerz.o zork.o

我想在SET_ONE中构建文件时向 CFLAGS 添加一个额外的选项,但不适用于SET_TWO中的文件。 例如,我想要:

> make -n
cc -c -DEXTRA_FLAG foo.c
cc -c -DEXTRA_FLAG bar.c
cc -c zerz.c
cc -c zork.c
...

由于这些文件具有相同的扩展名,因此相同的规则适用于所有文件,并且我没有看到一种直接的方法可以仅针对其中一个集中的文件调整 CFLAGS。

我可以为SET_ONE中的文件制定自定义规则:

foo.o : foo.c
  $(CC) $(CFLAGS) -DEXTRA_FLAG foo.c
bar.o : bar.c
  $(CC) $(CFLAGS) -DEXTRA_FLAG bar.c

但这会导致重复,这将更难维持。 有没有更清洁的方法可以做到这一点? 自从我入侵makefile以来可能已经有十年了。

有很多方法可以做到这一点。 最直接的是使用特定于目标的变量;添加到生成文件:

$(SET_ONE): CFLAGS += -DEXTRA_FLAG

相关内容

最新更新