news 2026/6/9 15:47:49

使用 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/8 18:45:43

通达信趋势顶底附图

{}A:MA(-100*(HHV(HIGH,34)-CLOSE)/(HHV(HIGH,34)-LLV(LOW,34)),19),COLORRED; B:-100*(HHV(HIGH,14)-CLOSE)/(HHV(HIGH,14)-LLV(LOW,14)); D:EMA(-100*(HHV(HIGH,34)-CLOSE)/(HHV(HIGH,34)-LLV(LOW,34)),4),LINETHICK2; 长期线:A100,COLOR9900FF; 短期线:B100,COLOR888888; 中…

作者头像 李华
网站建设 2026/6/5 3:47:26

34、UNIX 中 vi 编辑器的多场景应用与多文件编辑技巧

UNIX 中 vi 编辑器的多场景应用与多文件编辑技巧 1. vi 编辑器在不同场景的应用 vi 编辑器的命令结构在多年来已被应用于许多应用程序和软件中。若不熟悉 vi 的移动操作,可能在使用某些应用时会遇到困难。以下介绍几个 vi 在不同场景下的应用实例。 1.1 UNIX 邮件发送 在 …

作者头像 李华
网站建设 2026/6/9 15:11:29

LoFA 图像秒级适配好搭档

文章目录架构设计核心思想关键技术实现优势分析LoFA: Learning to Predict Personalized Priors for Fast Adaptation of Visual Generative Models https://github.com/GAP-LAB-CUHK-SZ/LoFA https://arxiv.org/abs/2512.08785 https://jaeger416.github.io/lofa/ 架构设计核心…

作者头像 李华
网站建设 2026/6/9 15:09:36

ITransformer: Inverted Transformers Are Effective for Time Series Forecasting

解释典型的Transformer架构用于时序预测效果差的原因,它们的观点:由单个时间步长形成的Token,由于过于局部的感受野和同时时间点表示的时间不对齐事件而难以显示有益信息。 时间序列预测模型的标准设定: 输入 (历史窗) XXX&#x…

作者头像 李华
网站建设 2026/6/8 12:36:54

EssentialPIM Pro:一站式个人信息管理工具,让生活更高效

在信息爆炸的时代,高效的个人信息管理工具显得尤为重要。EssentialPIM Pro作为一款功能全面的个人信息管理软件,集成了日历、联系人、任务、笔记等核心功能,堪称Microsoft Outlook的轻量级替代品。本文将从实际使用体验出发,详细介…

作者头像 李华
网站建设 2026/6/4 23:32:52

破除信息壁垒,强化系统联动,IBMS系统打造建筑智能控制核心

在智慧建筑飞速发展的当下,楼宇自控、安防监控、消防报警、能耗监测等子系统如同建筑的“四肢”,支撑着日常运营的每一项功能。但在传统管理模式中,各子系统独立运行、数据互不互通,形成一道道“信息壁垒”,不仅导致设…

作者头像 李华