news 2026/7/1 21:11:39

使用 CMake 和 Kconfig 构建系统时,增量编译和全量编译的区别

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
使用 CMake 和 Kconfig 构建系统时,增量编译和全量编译的区别

.全量编译(Full / Clean Build)

  • 定义:从头开始重新编译整个项目,包括所有源文件、头文件、配置文件等。
  • 触发方式
    • 手动执行rm -rf build/(或等效清理命令)后再重新配置和构建。
    • 修改了影响全局的配置(如 Kconfig 选项变更导致.configautoconf.h发生变化)。
    • 执行了类似west build -p always(Zephyr)或hb clean && hb build(鸿蒙)的命令。
  • 特点
    • 编译时间长。
    • 确保构建结果完全基于当前代码和配置,避免因缓存或依赖错误导致的问题。
    • 适用于配置大幅变更、怀疑构建缓存污染、或发布前的最终构建。

2.增量编译(Incremental Build)

  • 定义:仅重新编译自上次构建以来发生变更的源文件及其依赖项
  • 触发方式
    • 直接再次运行构建命令(如cmake --build build/ninja -C build)。
    • 修改了某个.c.h文件,但未改变全局配置。
  • 依赖机制
    • CMake 会根据文件时间戳或哈希值判断是否需要重新编译。
    • 若 Kconfig 配置未变,生成的autoconf.h不变,则大部分模块不会重新编译。
  • 特点
    • 编译速度快,提升开发效率。
    • 依赖 CMake 的依赖追踪机制是否完善(通常很可靠)。
    • 若构建系统未能正确识别依赖变化(如宏定义影响未被追踪),可能导致行为异常,此时需全量编译。

3.Kconfig 的特殊影响

  • Kconfig 用于生成配置头文件(如autoconf.hgenerated_dts_board.h)。
  • 一旦 Kconfig 选项被修改并重新配置(menuconfig后保存),CMake 通常会检测到配置文件变更,并触发受影响模块的重新编译(部分增量),但有时为保险起见,开发者会选择全量编译。
  • 在鸿蒙或类似系统中,执行hb build默认是增量的;若修改了Kconfig并重新生成.config,系统会自动重新生成相关头文件,并仅重新编译依赖这些配置的模块。
  • 总结对比

    项目

    增量编译

    全量编译

    编译范围

    仅变更文件及其依赖

    所有文件

    速度

    适用场景

    日常开发、小改动

    配置大改、构建异常、发布构建

    是否受 Kconfig 影响

    是(若配置变,相关模块重编)

    是(总是基于最新配置)

  • 日常开发优先使用增量编译以提升效率。
  • 若修改了 Kconfig 选项、设备树、或遇到“代码改了但行为没变”等诡异问题,尝试全量编译排除缓存干扰。

总结:

  • 全量编译:就像你把已经搭好的整个积木城堡全部拆掉,然后从第一块开始重新搭一遍。不管有没有改过,全都重来。
    👉优点:保证搭得绝对正确。
    👉缺点:太费时间!
  • 增量编译:你只改了城堡的一个小塔楼,那下次就只拆掉那个小塔楼,重新搭这部分,其他地方不动。
    👉优点:快!省时间!
    👉缺点:如果系统没发现“其他部分其实也受影响了”,可能会搭歪(不过大多数时候没问题)。

🛠️ 在 CMake + Kconfig 项目里:

  • 你只改了一个 .c 文件?
    → 下次编译,只重新编译这个文件和它相关的部分(增量编译)。
  • 你改了 Kconfig 配置(比如打开了某个功能)?
    → 系统会重新生成配置文件,然后只重新编译那些受这个配置影响的代码(通常也是增量,但范围可能变大)。
  • 你不确定为啥代码没生效?或者改了配置后行为奇怪?
    → 这时候就“全拆重搭”:删掉 build 文件夹(或执行 clean),重新编译全部(全量编译),确保干净。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/30 13:31:54

基于最优指派策略的弹道导弹目标数据关联算法

本文仅供学习使用,如有侵权,请私信联系本人删除Data Association Algorithm for Ballistic MissileTarget based on Optimal Assignment Strategy基于最优指派策略的弹道导弹目标数据关联算法文章脉络全文概述本文针对弹道导弹目标在突防过程中面临的密集…

作者头像 李华
网站建设 2026/6/30 5:54:23

通达信主图MACD

{}高1:REF(HHV(H,150),3); 低1:REF(LLV(L,150),3); H3:高1-(高1-低1)*0.5; 中轴:REFDATE(H3,DATE); B1:EMA(C,12); B2:EMA(C,26); B3:B1-B2; WDIF:EMA(EMA(EMA(C,3),3),3)B3,COLORWHITE; WDEA:EMA(WDIF,9),COLORMAGENTA,LINETHICK3; MACD:2*(WDIF-WDEA);{} STICKLINE(MACD>0…

作者头像 李华
网站建设 2026/7/1 15:39:28

Mistral 3 模型解析与部署实战:从 Large 3 到 Mini-stral

总部位于巴黎的 Mistral AI 宣布推出其最新一代 ​开源权重模型家族​,包括 Mistral Large 3 以及另外三款小型、稠密模型。所有模型均采用 Apache​ 2.0 许可证 发布,这意味着它们可以​自由用于商业用途、自行托管以及微调​。 Mistral 可以说是欧洲“…

作者头像 李华
网站建设 2026/6/26 2:05:17

2025网络安全学习路线 非常详细 推荐学习

关键词:网络安全入门、渗透测试学习、零基础学安全、网络安全学习路线 首先咱们聊聊,学习网络安全方向通常会有哪些问题 1、打基础时间太长 学基础花费很长时间,光语言都有几门,有些人会倒在学习 linux 系统及命令的路上&#…

作者头像 李华
网站建设 2026/6/27 7:03:00

测试必知:线上出现BUG,该怎么办!

在讲解故障处理思路前,先讲一个故障场景(以呼叫中心系统作为一例子): 业务人员反映呼叫中心系统运行缓慢,部份电话在自助语言环节系统处理超时,话务转人工座席,人工座席出现爆线情况。 运维人…

作者头像 李华