[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.
为什么不能找到它?它不会查找love
或loveit
,而是it
;我无法理解。
答案 0 :(得分:1)
宏check
最终得到值love it
;无论+=
运算符周围是否有空格,+=
操作都会在空白后添加新单词。
all
规则因此取决于love
和it
。您已经告诉它如何制作love
,但您没有告诉它如何制作it
(并且可能您没有可以编译以创建{{1}的文件it.*
使用推理规则),所以你得到错误信息。
您可以通过规则证明这一点:
it
在check:
@echo $(check)
规则之前。这会显示all
和love
之间的空格。
6.6将更多文本附加到变量
通常,在已定义的变量值中添加更多文本非常有用。你做这个 包含
it
的行,如下所示:+=
这会获取变量
objects += another.o
的值,并将文本objects
添加到其中(之前) 通过一个空间)。
请注意,查看POSIX规范没有意义,因为another.o
是GNU +=
中的扩展名。