试图让GNU make 3.81内置函数正常工作 但一直收到错误信息。
我构建了一个简单的makefile:
FOO=bar
$(info $(FOO) $(origin FOO))
$(firstword $(origin FOO))
然后跑了。 第一个功能有效但第二个功能不起作用。
错误信息是:
...
$ make -d
GNU Make 3.81 版权所有(C)2006 Free Software Foundation,Inc。 这是免费软件;查看复制条件的来源。 没有保修;甚至不适用于A的适销性或适用性 特别目的。
此程序专为i686-pc-linux-gnu
而构建阅读makefile ...
阅读makefile`makefile' ...
条文件
makefile:6:***缺少分隔符。停止。
...
前两个功能正常工作,为什么会发生这种情况?我没有看到明显的东西,或者这个版本的make不支持这个$(firstword)函数? 谢谢你的帮助。
答案 0 :(得分:1)
在大多数情况下,make文件看起来像这些块中的一个或多个:
target: [depends-on]...
command to build
another command
命令行以制表符开头。您的错误是抱怨找到2条看起来像目标线的连续线。
我从来没有见过你所说过的那本书,但要么是错了,要么你读错了。试试这个:
FOO=bar
all:
$(info $(FOO) $(origin FOO))
echo '<' $(firstword $(origin FOO)) '>'
你需要最后一行的回声,因为firstword
是一个普通的替换函数,而info
更像是一个命令。
我将尖括号放在firstword
行上,只是为了显示在哪里发生了什么。
再次注意,Makefile上的缩进行使用标签而不是空格。
答案 1 :(得分:0)
firstword
函数是文本操作函数。它将文本作为输入,并返回文本作为其输出。它不会写任何消息或错误输出。
因此,当您调用它时,您正在使用它来构建makefile。 Makefile具有特殊的语法,就像任何其他编程语言一样。当你将文本放入makefile时,它必须以特定的方式构造 - 你必须发表一个声明,或者定义一个变量,或者什么。
例如,这就是构建规则&#39;看起来像:
output: input
rule to produce output from input
你在makefile中放了一个单词($(firstword)
的结果),所以make假设你正在做某事 - 定义一个变量或指定一个构建规则。但你没有跟进任何其他的话。基本上,make程序有语法错误。 :(