变量名称存储在变量中.
最小的Makefile如下所示:
vars = var1 var2 var3var1 = AAAvar2 = BBBvar3 = CCCdefault: cp A B $(foreach var,$(vars),$(shell sed -i "s/$(var)/\"$(value $(var))\"/g" B))
文件A看起来像这样:
blabla var1 blablablabla var2 blablablabla var3 blabla
当我执行make时,我得到了输出
sed: can't read B: No such file or directorysed: can't read B: No such file or directorysed: can't read B: No such file or directorycp A B
复制语句在foreach之后执行!我可以通过设置一个单独的目标来解决这个问题,例如复制,只将复制命令放在那里并使默认值取决于复制.
但为什么???为什么规则内的执行顺序不严格?
我错过了什么?
PS:
$make --versionGNU Make 4.0Built for x86_64-pc-linux-gnu解决方法 $(shell)是一个make函数.它在make时执行(在这种情况下是在配方扩展时).这在配方执行之前发生.
$(foreach)也发生在那个时候.
你根本就不想要$(shell).您希望$(foreach)输出一个可以正常执行的单个(长)shell配方行. (确保使用a终止输出命令;使其合法化.)
default: cp A B $(foreach var,sed -i 's/$(var)/"$(value $(var))"/g' B;)
我也切换到单引号以避免需要转义,因为shell中没有任何东西需要扩展. make在这里完成所有变量扩展.
总结以上是内存溢出为你收集整理的Makefile中的执行顺序全部内容,希望文章能够帮你解决Makefile中的执行顺序所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)