Makefile变量赋值:'include'不允许作为变量?

时间:2012-07-20 22:34:30

标签: variables include makefile

在我的Fedora15盒子上,我可以像这样编写Makefile:

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

完美无缺。但是,每当我在Debian机器上尝试执行这样的Makefile时,我显然会因为'='周围的空白而出错。所以像这样重写它们:

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

修复它。现在我的问题是,这种不相容性是如何造成的?我的Fedora make是版本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上做这些事情(为什么'包含宏似乎没有在那里定义)而不是在Debian上呢?

1 个答案:

答案 0 :(得分:1)

  

现在我的问题仍然存在,但为什么我可以做这些事情   Fedora(为什么'包含宏似乎没有在那里定义)但没有   的Debian?

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

其他指令也是如此,例如vpath。在3.81中,如果在vpath之前有空格,则为名为=的变量指定值不起作用,则不会定义变量vpath。在3.82,这是固定的 - 如果你想这样称呼:-)我希望make在任何情况下都抱怨这些变量名。