在我的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上呢?
答案 0 :(得分:1)
现在我的问题仍然存在,但为什么我可以做这些事情 Fedora(为什么'包含宏似乎没有在那里定义)但没有 的Debian?
不同的行为不是由Linux的发行版差异引起的,而是由这些发行版中make
版本的差异引起的。如果在include
后面有空格,在=
之前(或任何其他任务类型),3.81
将错误地将其解析为include
指令。
其他指令也是如此,例如vpath
。在3.81
中,如果在vpath
之前有空格,则为名为=
的变量指定值不起作用,则不会定义变量vpath
。在3.82
,这是固定的 - 如果你想这样称呼:-)我希望make
在任何情况下都抱怨这些变量名。