configuration - 使 : Redo some targets if configuration changes

标签 configuration makefile

我想在配置更改时重新执行一些目标。

考虑这个例子:

我有一个配置变量(从环境变量或 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/

相关文章:

页面之间未保存 PHP session

linux - 只执行一次 Makefile 规则

git - 根据 git 描述输出重建 make 目标

shell - 在 ubuntu 中阻止命令(在 shell 中)

python - 我如何配置 IPython 5 以具有 IPython 3 的 readline、tab 完成、(缺少)语法高亮等? (self.IPython)

tomcat - 在启动时覆盖 Tomcat 默认值

C# app.config 问题 - ConfigurationErrorsException : Unrecognized element 'setting'

linux - Hyperledger Fabric SDK Go 安装错误。这里出了什么问题以及如何解决?

c++ - 如何在 makefile 中为目标编写特定规则?

java - Log4j 反射(reflect)配置文件的变化?