C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Makefile中的执行顺序大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个文件A,想要从中创建一个文件B,在make过程中替换相同的变量.
变量名称存储在变量中.

最小的Makefile如下所示:

vars = var1 var2 var3

var1 = AAA
var2 = BBB
var3 = CCC

default:
    cp A B
    $(foreach var,$(vars),$(sHell sed -i "s/$(var)/\"$(value $(var))\"/g" B))

文件A看起来像这样

blabla var1 blabla
blabla var2 blabla
blabla var3 blabla

当我执行make时,我得到了输出

sed: can't read B: No such file or directory
sed: can't read B: No such file or directory
sed: can't read B: No such file or directory
cp A B

复制语句在foreach之后执行!我可以通过设置一个单独的目标来解决这个问题,例如复制,只将复制命令放在那里并使认值取决于复制.

但为什么???为什么规则内的执行顺序不严格?

我错过了什么?

PS:

$make --version
GNU Make 4.0
Built for x86_64-pc-linux-gnu

解决方法

$(sHell)是@L_819_1@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中的执行顺序所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。