【发布时间】:2011-03-15 05:59:07
【问题描述】:
我有一个在命令行中接受选项的 makefile
make OPTION_1=1
基于该值,它将向对象子集添加额外的编译器定义。
ifeq ($(OPTION_1), 1)
CC_FLAGS += -DOPTION_1_ON
endif
定义中的更改会影响包含的头文件内容 - 存根或实现会暴露给目标文件。
如何让 make 重建受此选项更改“影响”的文件?
【问题讨论】:
我有一个在命令行中接受选项的 makefile
make OPTION_1=1
基于该值,它将向对象子集添加额外的编译器定义。
ifeq ($(OPTION_1), 1)
CC_FLAGS += -DOPTION_1_ON
endif
定义中的更改会影响包含的头文件内容 - 存根或实现会暴露给目标文件。
如何让 make 重建受此选项更改“影响”的文件?
【问题讨论】:
我使用一个文件来记住这些选项的最后一个值,如下所示:
.PHONY: force
compiler_flags: force
echo '$(CC_FLAGS)' | cmp -s - $@ || echo '$(CC_FLAGS)' > $@
cmp || echo 位表示文件compiler_flags 仅在设置更改时才被触及,所以现在你可以写类似
$(OBJECTS): compiler_flags
只要编译器标志发生变化,就会导致$(OBJECTS) 的重建。每次运行 make 时都会执行 compiler_flags 的规则,但只有在实际修改了 compiler_flags 文件时才会触发 $(OBJECTS) 的重建。
【讨论】:
compiler_flags.tmp,使其看起来更整洁。不过,我怀疑这不是你的意思。没有办法创建 some 文件来记住设置,因为 make 没有其他方法可以跨多个调用保留状态。
make 都会执行一次规则,所以除非你有一个自动脚本来多次执行make,否则开销应该可以忽略不计。