Solaris下使用条件赋值时的Makefile错误

3

我在Solaris 11.1的Makefile中运行条件赋值运算符时遇到了错误。但是,在Ubuntu上运行相同的Makefile时没有遇到任何错误。

version ?= 6.1
all:
    echo $(version)

注意:在原始代码中echo之前有一个制表符。这里使用四个空格只是为了方便编辑。

Solaris 11.1中遇到的错误:

make: Fatal error in reader: Makefile, line 1: Badly formed macro assignment

然而,在Ubuntu上不存在这样的错误。


Solaris不使用GNU make。如果您的makefile必须可移植到其他版本的make,请不要使用GNU make扩展。或者在Solaris上安装并使用GNU make。 - Jonathan Leffler
2个回答

4
更好的选择是使用gmake,因为许多Makefiles使用GNU特定功能。Solaris make可能使用稍微不同的语法。您可以阅读Solaris makefile手册,您会发现其中没有?=运算符。因此,您会收到该错误提示。

你能发一下 make --version 的输出吗?如果问题仍然存在。 - Sagar Sakre
感谢 @Sagar,Solaris操作系统使用gmake工具而不是make。 - animesh
make --version 抛出致命错误,但是 gmake --version 显示:GNU MAKE - 3.82。 - animesh
@animesh,抱歉我不太了解gmake。据我所知,gmake是GNU make,遵循http://www.gnu.org/software/make/manual/make.html语法。那么你的代码必须与它一起工作。 - Sagar Sakre
BDW,我有一个问题。你是如何运行makefile的? $~ gmake - Sagar Sakre
显示剩余2条评论

3

?=是GNU make添加的一个功能,在Ubuntu上它是默认版本的make,但在Solaris上则被安装为gmake/usr/gnu/bin/make。然而,原生命令行中的?=在Solaris上不受支持。老版本的系统上,这个原生命令行是安装在/usr/ccs/bin/make上的,而在Solaris 11及其后续版本上则安装在/usr/bin/make上。

如果你需要在你的makefile中使用GNU扩展,请确保你运行的是GNU make而非Solaris make。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接