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

Oli*_*ver 24 makefile gnu-make

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

make OPTION_1=1
Run Code Online (Sandbox Code Playgroud)

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

ifeq ($(OPTION_1), 1)
CC_FLAGS += -DOPTION_1_ON
endif
Run Code Online (Sandbox Code Playgroud)

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

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

slo*_*dog 43

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

.PHONY: force
compiler_flags: force
    echo '$(CC_FLAGS)' | cmp -s - $@ || echo '$(CC_FLAGS)' > $@
Run Code Online (Sandbox Code Playgroud)

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

$(OBJECTS): compiler_flags
Run Code Online (Sandbox Code Playgroud)

$(OBJECTS)在编译器标志发生变化时重建.每次运行make时都会执行compiler_flags规则,但$(OBJECTS)只有compiler_flags在实际修改文件时才会触发重建.