看完这篇文章,我终于搞懂了 CMake,真香!(进阶篇补充)

大家好,我是小康。

上次我们聊了 CMake 的构建类型、跨平台构建,还有测试和调试的整合,相信大家已经对 CMake 的应用有了更深的理解。

不过,项目越大,需求越复杂,构建流程和模块管理也会变得更棘手。比如,如何让编译更快一点?怎么优雅地管理多个模块,让项目不乱套?别急,这篇文章我们继续补充 CMake 进阶篇的剩余两个,聊聊 CMake 的性能优化和多模块构建的高级技巧!

友情提醒:原创不易,如果觉得内容对你有帮助,别忘了点赞、收藏,关注支持一下!非常感谢!🌟

微信搜索 【跟着小康学编程】,关注我公众号,持续分享计算机编程硬核技术文章。

10. CMake 的性能优化

在开发大型项目时,编译时间往往会变得很长,这时候优化 CMake 的构建过程是非常有必要的。幸运的是,CMake 提供了很多技巧和工具来帮助我们加速构建过程,减少无意义的编译时间。我们可以从多个方面来优化性能,今天我们重点讲解几个常见的优化方法。

10.1 使用并行构建

构建项目时,CMake 默认会按照顺序一个任务一个任务地执行,尤其是当项目越来越大时,这样的构建方式效率低下。好消息是,CMake 允许我们启用并行构建,这样多个构建任务就可以同时进行,极大地缩短了构建时间。

如何启用并行构建?

其实,这个不需要在 CMake 配置文件中做任何改动。只需要在运行 makecmake --build 时,加上 -j 参数即可指定并行构建的任务数量:

# 指定 4 个任务并行编译
make -j4

如果你不确定你有多少核心可以用,直接使用 -j,CMake 会自动选择合适的并行数:

make -j

这样做会显著提高构建速度,尤其是在多核 CPU 上。

注意:一般推荐设置为 CPU 核心数或略大于核心数。例如: 如果有 4 核心,可以使用 make -j4make -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 使用预构建的库

在项目中,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值