对于单平台项目,cmake 相对于 make 有什么好处

What are the benefits of cmake over make for single platform project

如果有一个比较大的项目完全是用Makefiles构建的,用cmake代替make是否合适?每个人都强调 cmake 使支持跨平台开发变得更容易,但在这种情况下,目标平台只是一个,没有计划改变它。在这种特定情况下,cmake 对我有什么好处?

  1. CMake 还擅长寻找依赖关系。以 OpenMP、TBB 和 MPI 为例,它们在并行执行时非常常见。 CMake 提供了方便的方法来检查这些库中的哪些存在。你得到一个变量来使用添加包含和库到你的目标,你就完成了。如果您想知道在您的 C、C++ 代码(或您使用的任何东西)中存在哪个库,CMake 提供了将预处理器宏传递给编译器命令的方法。

  2. CMakeLists.txt 文件比 Makefile 更间接。这使它们更难阅读和理解。随着项目规模的增长,它变成了一种优势,因为您必须在一个或更少的点上进行更改。

  3. 使用 CTest 可以很容易地包含基本测试。

  4. 您可以在项目中包含一些模块(CMake 代码文件)。这可以帮助您找到依赖项、自动化 Qt 的 moc(已包含在 CMake 中)或构建您的文档(Sphinx、JavaDoc、Doxygen、LaTeX)。使用 Make,大多数时候您最终会编写自己的代码。

当然,您可以用 make 做任何事情,但需要更多的努力。您的项目越大,获得的目标和依赖项越多,成熟的构建系统的回报就越大。不仅CMake如此,Meson、Waf等也如此