强制gnu make来重建受编译器定义影响的对象

时间:2010-07-13 10:18:29

标签: makefile gnu-make

我有一个makefile,它在命令行中获取选项

make OPTION_1=1

根据该值,它将向对象子集添加其他编译器定义。

ifeq ($(OPTION_1), 1)
CC_FLAGS += -DOPTION_1_ON
endif

定义中的更改会影响包含的头文件内容 - 存根或实现会暴露给目标文件。

如何通过此选项更改来重建受影响的文件?

2 个答案:

答案 0 :(得分:43)

我使用文件记住这些选项的最后一个值,如下所示:

.PHONY: force
compiler_flags: force
    echo '$(CC_FLAGS)' | cmp -s - $@ || echo '$(CC_FLAGS)' > $@

cmp || echo位表示文件compiler_flags仅在设置更改时被触摸,因此现在您可以编写类似

的内容
$(OBJECTS): compiler_flags

在编译器标志更改时导致重建$(OBJECTS)。每次运行make时都会执行compiler_flags规则,但只有$(OBJECTS)文件实际被修改时才会触发compiler_flags的重建。

答案 1 :(得分:0)

将它们放入目标中,然后在每个文件上调用touch。