0

在我的 Fedora15 机器上,我可以这样编写 Makefile:

app  = MyApplication
deps = `pkg-config ...`

效果很好。然而,每当我尝试在 Debian 机器上执行这样的 Makefile 时,我显然会因为 '=' 周围的空格而出现错误。所以像这样重写它们:

app=MyApplication
deps=`pkg-config ...`

修复它。现在我的问题是,这种不兼容是如何引起的?我的 Fedora 版本是 3.82,而我的 Debian 版本是 3.81。搜索 make 的变更日志也没有发现任何使这成为可能的更改..

编辑:

我似乎找到了这种奇怪行为的原因:在我的大多数 makefile 中,我通常使用变量“include”来保存所有 pkg​​-config 输出。现在显然 'include' 是某种关键字,当在 Debian 上不这样使用时

include="stuff"

触发宏,寻找路径什么的。如果我如上所示使用它,我可以将它用作普通变量。但现在有趣的是:我总是可以在 Fedora 上使用 'include' 作为变量名!因此像这样的行:

include = `pkg-config --blah`

在 Fedora 下完美运行,但在 Debian 下总是失败,吐出“Makefile:2:=:没有这样的文件或目录”的行(它显然将 '=' 和其他所有内容都视为路径)

现在我的问题仍然存在,但是为什么我可以在 Fedora 上做这样的事情(为什么 'include 宏似乎没有在那里定义)而不是在 Debian 上?

4

1 回答 1

1

现在我的问题仍然存在,但是为什么我可以在 Fedora 上做这样的事情(为什么 'include 宏似乎没有在那里定义)而不是在 Debian 上?

不同的行为不是由 Linux 发行版的差异引起的,而是由make这些发行版中的版本差异引起的。如果在include、 before =(或任何其他赋值风格)之后有空格,3.81则会错误地将其解析为include指令。

其他指令也是如此,例如vpath. 在中,如果在 之前有空格,则无法3.81为名为的变量赋值,则不会定义该变量。在,这是固定的——如果你想这样称呼它:-)无论如何我宁愿抱怨这些变量名。vpath=vpath3.82make

于 2012-07-21T17:34:16.847 回答