简单来说就是esp-idf的构建系统会自动编译components(名称固定)文件夹下面的CMakeLists.txt,通过CMake将组件放到项目中,优先编译我们创建项目中的components文件夹下的CMakeList.txt,然后在编译esp-idf架构中的components文件夹,我们自己创建的组件优先级大于esp-idf架构组件的优先级。
每次构建时,组件注册的核心作用就是告诉项目头文件路径、依赖库位置、链接规则,让项目能找到并调用组件功能;
而代码编译分为两部分 —— 你的项目代码每次变更都会重新编译,ESP-IDF 内置组件或自定义组件的源码只要没改,就会直接复用之前的编译产物,不用重复编译,前提是都需要编译一次
先构建,把那些需要的驱动库都加载到项目里,在进行编译,我们用了那些组件,都需要在CMakeList.txt文件中写出来。
- 构建启动后,先执行组件注册:按 “项目自定义
components> ESP-IDF 内置components” 的优先级扫描所有组件,读取CMakeLists.txt,确定头文件路径、依赖关系、库文件位置,让项目 “认识” 所有可用组件。 - 接着,构建系统会分析项目代码的依赖,识别出项目实际用到的组件,再执行编译:首次构建时,项目代码和所有被依赖的组件会全部编译;后续构建时,只有变更过的代码或组件会重新编译,未变更的直接复用旧产物。
main组件依赖所有组件,不需要声明,可以直接引用.h文件,其余我们创建的组件都需要先声明,在进行.h引用