首页 > 解决方案 > Makefile 中的变量替换会产生意想不到的结果

问题描述

我有一个 Makefile:

FOO=one two

$(FOO):
    echo $@

现在我运行:

make one并得到echo one

make two并得到echo two

make three并得到一个错误

这是意料之中的。

但是,当我将 Makefile 更改为:

FOO=one two

$(FOO)$(FOO):
    echo $@

还是一样!

我希望我必须输入make oneone,但事实并非如此。

这是为什么?

标签: makefile

解决方案


因为make信任地粘贴您提供的任何内容作为内容。取决于行中不可见的其余部分,FOO=one two...即是否有空格,您正在生产one twoone twoor one two one two。我认为后者不是非法的,但会产生类似target given more than once in same line.


推荐阅读