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

Ste*_*314 23 portability nmake makefile gnu-make

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

显然有"哪个操作系统?","哪个编译器?" 和"哪个链接器?",但我具体指的是makefile本身的语法,语义和命令行选项.

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

Jon*_*ler 11

GNU Make和POSIX使共享成为一个共同的核心,以便GNU Make能够理解用于POSIX Make的makefile并以相同的方式解释它们 - 除了极少数例外.但是,许多GNU Makefile使用仅在GNU Make中可用的功能.有时这是故意的和有意识的; 有时它不是(并且"有时不是"是一个问题).我不熟悉微软的nmake; 我相信它的核心可能接近POSIX Make语义,但它会有自己不同的扩展集.

一般来说,autoconf产生的程序与便携式Makefile类似.

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

POSIX未定义后缀规则的'%.x'符号- 它们被识别为公共扩展名:

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

  • 命令行选项(与`MAKEFLAGS`变量相关),特殊目标(大写,以点开头)和内置规则也有很大不同.但是,例如`.PHONY`特殊目标似乎甚至在Gnu Make world之外得到支持.我认为唯一安全的方法是测试你的makefile.如果你想安全地玩它,请坚持POSIX,即使它定义了非常有限的品牌. (3认同)