当makefile是这样时,为什么错误“没有规则使目标''''?

时间:2014-01-23 05:22:12

标签: makefile

[root@localhost src]# cat Tmake

check=love

check+=it

all:    $(check)


love:
        echo "love"

loveit:
        echo "loveit"


[root@localhost src]# make -f Tmake
echo "love"
love
make: *** No rule to make target `it', needed by `all'.  Stop.

为什么不能找到它?它不会查找loveloveit,而是it;我无法理解。

1 个答案:

答案 0 :(得分:1)

check最终得到值love it;无论+=运算符周围是否有空格,+=操作都会在空白后添加新单词。

all规则因此取决于loveit。您已经告诉它如何制作love,但您没有告诉它如何制作it(并且可能您没有可以编译以创建{{1}的文件it.*使用推理规则),所以你得到错误信息。

您可以通过规则证明这一点:

it

check: @echo $(check) 规则之前。这会显示alllove之间的空格。


GNU Make(3.82)参考手册

  

6.6将更多文本附加到变量

     

通常,在已定义的变量值中添加更多文本非常有用。你做这个   包含it的行,如下所示:

+=
     

这会获取变量objects += another.o 的值,并将文本objects添加到其中(之前)   通过一个空间)。

请注意,查看POSIX规范没有意义,因为another.o是GNU +=中的扩展名。