学习Makefile:Make的所有实现中的规则是否通用?

时间:2015-03-23 00:41:13

标签: cmake makefile gnu-make nmake

我对学习Makefile项目的艺术感兴趣。但是,我有一个问题。

背景: 在我的计算机上,我安装了nmake,我在安装Visual Studio时假设它已经安装。我可能正在考虑让我的C ++项目使用nmake使用makefile结构。但是,如果我想转向其他流行的make版本呢? gmake?这引出了我的主要问题:

如果我学会了makenmakegmake)的一个实现并转移到另一个实现,我可以预期makefile语法的差异程度?在惯例/实践中?

如果每个实现之间存在实质性差异,我会有一个后续问题(有点自以为是):

我应该首先学习make的哪个实现?为什么?

1 个答案:

答案 0 :(得分:5)

cmake根本不是make的实现。它是一个完全不同的工具:cmake是创建项目构建控制文件的工具,例如makefile,Visual Studio项目文件,Xcode项目文件,Eclipse项目文件等.Cmake语法没有无论如何要做出语法。

nmake是一种""""制作工具,但它也与其他版本的make不同;大多数其他版本的make(GNU make,Solaris make,BSD make等)至少符合make的POSIX规范。 nmake(据我所知)并没有这样做。但是,用于定义规则的nmake的基本语法与make的其他版本类似。

GNU make是一个高度可移植的make版本,支持POSIX,还有大量非便携式扩展。但是,GNU make本身具有高度可移植性:除了Windows(本机和cygwin)和UNIX(BSD,Linux,Solaris等)系统外,它还支持VMS和其他操作系统。

在上面,nmake是最少便携式选项;它只能在Windows上使用。如果你想使用各种开发工具,cmake是一个不错的选择,但它绝不是像make一样。如果你想学习make和makefiles,并且可以在各种各样的平台上移植,你最好的选择是GNU make。