大家好,我是小康。
上次我们聊了 CMake 的构建类型、跨平台构建,还有测试和调试的整合,相信大家已经对 CMake 的应用有了更深的理解。
不过,项目越大,需求越复杂,构建流程和模块管理也会变得更棘手。比如,如何让编译更快一点?怎么优雅地管理多个模块,让项目不乱套?别急,这篇文章我们继续补充 CMake 进阶篇的剩余两个,聊聊 CMake 的性能优化和多模块构建的高级技巧!
友情提醒:原创不易,如果觉得内容对你有帮助,别忘了点赞、收藏,关注支持一下!非常感谢!🌟
微信搜索 【跟着小康学编程】,关注我公众号,持续分享计算机编程硬核技术文章。
10. CMake 的性能优化
在开发大型项目时,编译时间往往会变得很长,这时候优化 CMake 的构建过程是非常有必要的。幸运的是,CMake 提供了很多技巧和工具来帮助我们加速构建过程,减少无意义的编译时间。我们可以从多个方面来优化性能,今天我们重点讲解几个常见的优化方法。
10.1 使用并行构建
构建项目时,CMake 默认会按照顺序一个任务一个任务地执行,尤其是当项目越来越大时,这样的构建方式效率低下。好消息是,CMake 允许我们启用并行构建,这样多个构建任务就可以同时进行,极大地缩短了构建时间。
如何启用并行构建?
其实,这个不需要在 CMake 配置文件中做任何改动。只需要在运行 make 或 cmake --build 时,加上 -j 参数即可指定并行构建的任务数量:
# 指定 4 个任务并行编译
make -j4
如果你不确定你有多少核心可以用,直接使用 -j,CMake 会自动选择合适的并行数:
make -j
这样做会显著提高构建速度,尤其是在多核 CPU 上。
注意:一般推荐设置为 CPU 核心数或略大于核心数。例如: 如果有 4 核心,可以使用
make -j4或make -j5
10.2 降低不必要的重新构建
1、使用缓存变量
CMake 可能会因为一些设置或配置的变化触发全量构建。比如,每次你设置了构建类型(Debug、Release 等),CMake 会重新计算一遍所有的配置,造成浪费。为了避免这种情况,我们可以使用 缓存变量。
举个例子: 假设你设置了构建类型 CMAKE_BUILD_TYPE,你可以通过缓存机制来保存它,避免每次都重新设置。
set(CMAKE_BUILD_TYPE "Release" CACHE STRING "Choose the build type")
这段代码将 CMAKE_BUILD_TYPE 设置为 Release,并且把它存到缓存中。下次你运行 CMake 时,它会记住这个设置,而不会重新计算一遍,从而加快构建过程。
2、增量构建
CMake 的构建很聪明,不会每次都重新编译所有文件。只有当代码发生改动时,才会重新编译相关的部分,比如修改了某个源文件,CMake 只会编译这个文件,不会动其他没改的文件。
这种智能的增量编译是基于目标和文件的依赖关系实现的。比如:
set(SRC_FILES lib.c)
add_library(mylib STATIC ${SRC_FILES})
target_link_libraries(mylib otherlib)
这里的 mylib 依赖 SRC_FILES,CMake 会跟踪这些文件的变化,只有文件被修改时,mylib 才会重新编译。
3、缩小编译范围
有时候,整个项目非常庞大,你只想重新编译其中的一个部分。这时,你可以使用 --target 参数来只编译你需要的部分。
cmake --build . --target my_target
这个命令会只编译 my_target,而不是整个项目,这样就节省了很多时间,尤其在调试阶段,非常有用。
10.3 使用预构建的库
在项目中,


1724

被折叠的 条评论
为什么被折叠?



