makefile - 对于单平台项目,cmake 比 make 有什么好处
问题描述
如果有一个相对较大的项目完全使用Makefile
s 构建,是否可以用 s 替换 make cmake
?每个人都强调cmake
更容易支持跨平台开发,但如果目标平台只是一个,并且没有计划改变它。cmake
在这种特定情况下,我会从中获得什么好处?
解决方案
CMake 还擅长查找依赖项。以 OpenMP、TBB 和 MPI 为例,它们在并行执行方面非常常见。CMake 提供了方便的方法来检查这些库中的哪些存在。你得到一个变量来使用添加包含和库到你的目标,你就完成了。如果您想在您的 C、C++ 代码(或您使用的任何代码)中知道存在哪个库,CMake 提供了将预处理器宏传递给编译器命令的方法。
与 Makefile 相比,CMakeLists.txt 文件更间接。这使它们更难阅读和理解。随着项目规模的扩大,它变成了一种优势,因为您必须在一个或更少的点上进行更改。
使用 CTest 很容易包含基本测试。
您可以在项目中包含一些模块(CMake 代码文件)。这可以帮助您找到依赖项、自动化 Qt 的 moc(已包含在 CMake 中)或构建您的文档(Sphinx、JavaDoc、Doxygen、LaTeX)。使用 Make,大多数时候您最终都会编写自己的代码。
当然,你可以用 make 做任何事情,但它需要更多的努力。您的项目越大,获得的目标和依赖项越多,成熟的构建系统就越能得到回报。这不仅适用于 CMake,也适用于 Meson、Waf 等。
推荐阅读
- oracle - 'rownum' vs 'fetch next',各自的优缺点是什么?
- c# - 根据包含的字符串获取列表,然后按列表中相同的数值对其进行排序
- javascript - Vue向@click事件添加条件
- python - 如何修复阶乘打印程序中的错误?
- python - 使用 umongo 批量插入/更新
- c++ - Windows API,C++:有没有办法创建一个句柄来使用 WriteFile() 将输出重定向到一个字符串?
- python - 如何重构多个大 if 语句?
- docker - 码头间通信 - 从一个码头到另一个码头的 HTTP 请求失败
- xamarin.forms - Xamarin Forms iOS安全区域在加载时调整大小?
- sql - SQL Server - 在一个结果与您需要的匹配后获得结果