使用Makefile和cmake编译代码之间的区别

我在C / C ++上编码并使用(GNU)Makefile来编译代码。 我可以用cmake做同样的事情,并得到一个MakeFile。 不过,我不明白使用Makefile和cmake编译代码有什么区别。

make(或者说Makefile)是一个构build系统 – 它驱动编译器和其他构build工具来构build你的代码。

CMake是构build系统的一个发生器。 它可以生成Makefiles,它可以生成Ninja生成文件,可以生成KDEvelop或XCode项目,它可以生成Visual Studio解决scheme。 从相同的起点,相同的CMakeLists.txt文件。 所以如果你有一个独立于平台的项目,CMake也是一种使系统独立的方法。

如果你有Windows开发者习惯了GNU Make发誓的Visual Studio和Unix开发者,那么CMake就是其中之一。

如果您希望您的项目是多平台或广泛使用的,我总是会推荐使用CMake(或另一种构build系统生成器,但CMake是我个人的偏好)。 CMake本身也提供了一些很好的function,如依赖检测,库接口pipe理,或与CTest,CDash和CPack集成。

使用构build系统生成器使您的项目更具前瞻性。 即使你现在只是GNU-Make,如果你以后决定扩展到其他平台(不pipe是Windows还是embedded的东西),还是只想使用IDE?