编译源的子集时应用不同的标志
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
我的项目中有两组源文件,我需要从中生成目标文件。
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