【发布时间】:2016-06-11 06:33:38
【问题描述】:
试图让 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. 这是免费软件;查看复制条件的来源。 没有保修;甚至不适合适销性或适合性 特殊目的。
这个程序是为 i686-pc-linux-gnu 构建的
正在读取 makefile...
正在读取 makefile `makefile'...
条形文件
makefile:6: *** 缺少分隔符。停下来。
...
前两个功能正常工作,为什么会发生这种情况?我没有看到明显的东西,还是这个版本的 make 不支持这个 $(firstword) 函数? 感谢您的帮助。
【问题讨论】:
-
上面的 makefile 示例直接来自 John Graham-Cumming 的“GNU Make Book”一书。它不需要目标或使用选项卡或在规则中让 Make 构建它。我刚刚发现的一个示例有效:
MY_LIST = a program for directed compilation $(info The first word is $(firstword $(MY_LIST)))这解决了我的部分问题,即 $(firstword ...) 函数确实有效。所以真正的问题是“为什么函数 $(origin ..) 没有输出兼容的字符串?” -
在食谱之外使用 make 函数是完全合法的,与建议的答案相反。由于您没有任何目标,因此 make 应该投诉为
make: *** No targets. Stop.。但是,它仍然应该打印$(info ...)消息....您可以尝试在末尾添加一个空目标,即在末尾添加行all:吗?
标签: makefile