对于单平台项目,cmake 相对于 make 有什么好处
What are the benefits of cmake over make for single platform project
如果有一个比较大的项目完全是用Makefile
s构建的,用cmake
代替make是否合适?每个人都强调 cmake
使支持跨平台开发变得更容易,但在这种情况下,目标平台只是一个,没有计划改变它。在这种特定情况下,cmake
对我有什么好处?
CMake 还擅长寻找依赖关系。以 OpenMP、TBB 和 MPI 为例,它们在并行执行时非常常见。 CMake 提供了方便的方法来检查这些库中的哪些存在。你得到一个变量来使用添加包含和库到你的目标,你就完成了。如果您想知道在您的 C、C++ 代码(或您使用的任何东西)中存在哪个库,CMake 提供了将预处理器宏传递给编译器命令的方法。
CMakeLists.txt 文件比 Makefile 更间接。这使它们更难阅读和理解。随着项目规模的增长,它变成了一种优势,因为您必须在一个或更少的点上进行更改。
使用 CTest 可以很容易地包含基本测试。
您可以在项目中包含一些模块(CMake 代码文件)。这可以帮助您找到依赖项、自动化 Qt 的 moc(已包含在 CMake 中)或构建您的文档(Sphinx、JavaDoc、Doxygen、LaTeX)。使用 Make,大多数时候您最终会编写自己的代码。
当然,您可以用 make 做任何事情,但需要更多的努力。您的项目越大,获得的目标和依赖项越多,成熟的构建系统的回报就越大。不仅CMake如此,Meson、Waf等也如此
如果有一个比较大的项目完全是用Makefile
s构建的,用cmake
代替make是否合适?每个人都强调 cmake
使支持跨平台开发变得更容易,但在这种情况下,目标平台只是一个,没有计划改变它。在这种特定情况下,cmake
对我有什么好处?
CMake 还擅长寻找依赖关系。以 OpenMP、TBB 和 MPI 为例,它们在并行执行时非常常见。 CMake 提供了方便的方法来检查这些库中的哪些存在。你得到一个变量来使用添加包含和库到你的目标,你就完成了。如果您想知道在您的 C、C++ 代码(或您使用的任何东西)中存在哪个库,CMake 提供了将预处理器宏传递给编译器命令的方法。
CMakeLists.txt 文件比 Makefile 更间接。这使它们更难阅读和理解。随着项目规模的增长,它变成了一种优势,因为您必须在一个或更少的点上进行更改。
使用 CTest 可以很容易地包含基本测试。
您可以在项目中包含一些模块(CMake 代码文件)。这可以帮助您找到依赖项、自动化 Qt 的 moc(已包含在 CMake 中)或构建您的文档(Sphinx、JavaDoc、Doxygen、LaTeX)。使用 Make,大多数时候您最终会编写自己的代码。
当然,您可以用 make 做任何事情,但需要更多的努力。您的项目越大,获得的目标和依赖项越多,成熟的构建系统的回报就越大。不仅CMake如此,Meson、Waf等也如此