我想在配置更改时重新执行一些目标。
考虑这个例子:
我有一个配置变量(从环境变量或 config.local 文件读取):
CONF:=...
基于这个变量CONF,我组装了一个头文件conf.hpp,如下所示:
conf.hpp:
buildConfHeader $(CONF)
现在,当然,如果配置变量发生更改,我想重建此 header ,因为否则 header 将不会反射(reflect)新配置。但我怎样才能用 make 来跟踪它呢?配置变量不绑定(bind)到文件,因为它可以从环境变量中读取。
有什么办法可以实现这一点吗?
最佳答案
我已经弄清楚了。希望这对遇到同样问题的人有所帮助:
我从配置本身构建一个文件名,所以如果我们有
CONF:=a b c d e
然后我通过用下划线替换空格来创建配置标识符,即
null:=
space:= $(null) #
CONFID:= $(subst $(space),_,$(strip $(CONF))).conf
这将导致CONFID=a_b_c_d_e.conf
现在,我使用此 $(CONFID)
作为 conf.hpp
目标的依赖项。此外,我还为 $(CONFID)
添加了一条规则,以删除旧的 .conf
文件并创建一个新文件:
$(CONFID):
rm -f *.conf #remove old .conf files, -f so no error when no .conf files are found
touch $(CONFID) #create a new file with the right name
conf.hpp: $(CONFID)
buildConfHeader $(CONF)
现在一切正常。名为 $(CONFID)
的文件跟踪用于构建当前 conf.hpp
的配置。如果配置发生更改,则 $(CONFID)
将指向不存在的 .conf
文件。因此,第一个规则将被执行,旧的conf将被删除并创建一个新的。标题将被更新。正是我想要的:)
关于configuration - 使 : Redo some targets if configuration changes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21826550/