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

时间:2015-03-12 21:54:27

标签: makefile gnu-make

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

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以来,这可能已经十年了。

1 个答案:

答案 0 :(得分:3)

有很多方法可以做到这一点。最简单的用途target-specific variables;添加到您的makefile:

$(SET_ONE): CFLAGS += -DEXTRA_FLAG