【发布时间】:2012-07-20 22:34:29
【问题描述】:
在我的 Fedora15 机器上,我可以这样编写 Makefile:
app = MyApplication
deps = `pkg-config ...`
效果很好。然而,每当我尝试在 Debian 机器上执行这样的 Makefile 时,我显然会因为 '=' 周围的空格而出现错误。所以像这样重写它们:
app=MyApplication
deps=`pkg-config ...`
修复它。现在我的问题是,这种不兼容是如何引起的?我的 Fedora 版本是 3.82,而我的 Debian 版本是 3.81。搜索 make 的 Changelog 也没有发现任何使这成为可能的更改..
编辑:
我似乎找到了这种奇怪行为的原因:在我的大多数 makefile 中,我通常使用变量“include”来保存所有 pkg-config 输出。现在显然 'include' 是某种关键字,当 not 在 Debian 上像这样使用时
include="stuff"
触发宏,寻找路径或其他东西。如果我如上所示使用它,我可以将它用作普通变量。但现在有趣的是:我可以总是在 Fedora 上使用 'include' 作为变量名!因此像这样的行:
include = `pkg-config --blah`
在 Fedora 下完美运行,但在 Debian 下总是失败,吐出“Makefile:2: =: No such file or directory”行(它显然将 '=' 和其他所有内容都视为路径)
现在我的问题仍然存在,但是为什么我可以在 Fedora 上做这样的事情(为什么 'include 宏似乎没有在那里定义)而不是在 Debian 上?
【问题讨论】:
-
我正在运行 Debian(使用 make 版本 3.81-8.2)并且变量周围的空格没有问题。
-
@Nicolás 好吧,我在两台 Debian 机器上试过这个,一台在工作,另一台是 RaspberryPi,但它总是出现故障..
-
很奇怪。文档明确指出应该忽略空格,请参阅Setting Variables。在 Linux 上,
make使用宏isblank()来检测这些空格,而后者又使用语言环境设置。您的语言环境应将空白定义为<space>或<tab>。也许您的语言环境有问题?你得到什么错误? -
@ReinierTorenbeek 抱歉,如果我在示例中使用与 Makefile 中相同的变量名称,您可能会更容易发现错误。查看我的问题,我更新了它跨度>
标签: variables include makefile