【问题标题】:How similar/different are gnu make, microsoft nmake and posix standard make?gnu make、microsoft nmake 和 posix 标准 make 有何相似/不同之处?
【发布时间】:2011-01-17 16:49:38
【问题描述】:

gnu make、microsoft nmake 和 posix standard make 的相似/不同之处如何?

显然有诸如“哪个操作系统?”、“哪个编译器?”之类的东西。和“哪个链接器?”,但我特别指的是 makefile 本身的语法、语义和命令行选项。

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

【问题讨论】:

标签: makefile portability nmake gnu-make


【解决方案1】:

GNU Make 和 POSIX Make 共享一个共同的核心,因此 GNU Make 可以理解用于 POSIX Make 的 makefile 并以相同的方式解释它们 - 很少有例外。但是,许多 GNU Makefile 使用仅在 GNU Make 中可用的功能。有时这是故意和有意识的;有时不是(而“有时不是”是个问题)。我对 Microsoft nmake 不太熟悉;我相信它的核心可能会接近 POSIX Make 语义,但它会有自己不同的扩展集。

一般来说,像 autoconf 这样的程序产生的东西接近于可移植的 Makefile。

使用 GNU Make 时要注意的主要事项是所有用于将文件名(宏)映射为有用值的扩展函数符号。虽然它们无疑很有用,但它们也是可移植性的陷阱。

后缀规则的 '%.x' 符号不是由 POSIX 定义的 - 它们被识别为通用扩展:

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

【讨论】:

  • 我遇到过几次 aix make 程序。呸。它是严格的 POSIX 还是其他标准?
  • @unknown:它与 POSIX Make 相当接近——介于它和 System V make 程序之一之间。 POSIX Make 几乎是各种 make 变体的一个常见子集。
  • 还有命令行选项(与MAKEFLAGS 变量相关)、特殊目标(大写,以点开头)和内置规则变化很大。但是例如.PHONY 即使在 Gnu Make 世界之外,似乎也支持特殊目标。我认为唯一安全的方法是测试你的makefile。如果您想安全地使用它,请遵守 POSIX,即使它定义了一个非常有限的品牌。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-06
  • 1970-01-01
  • 2015-08-17
  • 2019-05-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多