GNU make、Microsoft nmake和POSIX标准make有哪些相似之处/不同之处?

25

gnu make、microsoft nmake和posix标准make有多相似/不同?

显然,这要看“哪个操作系统?”,“哪个编译器?”和“哪个链接器?”,但我特别指的是makefile本身的语法、语义和命令行选项。

如果我按照gnu make手册编写makefile,那么我需要注意哪些最重要的可移植性问题?


相关:将GNU-Make限制为POSIX Make行为@Unix.SE 不幸的是,似乎没有办法实现这一点,你只能使用.POSIX特殊目标,但仍然会启用许多扩展功能。 - Palec
1个回答

11

GNU Make(一种自由软件构建工具)和POSIX Make共享一个共同的核心,因此GNU Make可以理解为POSIX Make而编写的makefile并以相同的方式解释它们 - 几乎没有例外。 但是,许多GNU Makefile使用了仅在GNU Make中可用的功能。有时这是故意的和明确的; 有时不是(“有时不是”是一个问题)。我对Microsoft nmake不太熟悉;我认为它很可能紧密贴合POSIX Make语义,但它将拥有自己不同的扩展集。

总的来说,像autoconf这样的程序生成的内容与可移植Makefile相近。

要注意在使用GNU Make时的主要问题是所有扩展函数符号,这些符号用于将文件名(宏)映射为有用的值。虽然它们无疑非常有用,但它们也会导致移植性陷阱。

'%.x'标记用于后缀规则,在POSIX make规范中未定义 - 它们被认为是一种常见的扩展:

包含字符'%''"'的目标的解释是实现定义的。


我遇到了aix make程序几次。呸。它严格遵循POSIX标准还是其他标准? - Anycorn
@unknown:它非常接近于 POSIX Make - 介于该版本和某个 System V make 程序之间。POSIX Make 实际上是各种 make 变体的一个普遍子集。 - Jonathan Leffler
3
命令行选项(与MAKEFLAGS变量相关),特殊目标(大写字母,以点号开头)和内置规则变化很大。但例如.PHONY特殊目标似乎即使在Gnu Make之外也得到支持。我认为唯一安全的方法是测试您的makefile。如果你想玩得更保险,遵循POSIX规范,即使它定义了一个非常有限的make。 - Palec
我尝试搜索官方的POSIX make文档,但是没有找到,也不知道它的最新版本。GNU make页面没有列出更新时间,或者他们提到的是哪个POSIX版本。 - user8395964
你有跟随之前答案中提到的 POSIX 链接吗?它实际上是指向 make 的 POSIX 规范。我已经修改了文本以使其更清晰明了。 - Jonathan Leffler

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