GNU使内置函数无法正常工作

时间:2016-02-28 05:00:37

标签: makefile

试图让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)函数? 谢谢你的帮助。

2 个答案:

答案 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程序有语法错误。 :(