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

Apply distinct flags when compiling a subset of the sources

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

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 可能已经有十年了。

有多种方法可以做到这一点。最直接的使用target-specific variables;添加到您的 makefile:

$(SET_ONE): CFLAGS += -DEXTRA_FLAG