大家好,我是杂烩君。
今天,我们就通过一个简单的Linux C 语言实战案例,带你深度剖析嵌入式 CMake 的核心套路。
使用 CMake 的好处
平台无关性:一套配置文件,适配 ARM、x86 等多种架构。
模块化管理:轻松分离驱动层、库和应用程序,代码结构一目了然。
自动化构建:从编译、链接到生成固件,一条make
命令搞定。
CMake例子
我们的例子包含三个核心模块:
- 静态库(strutils):字符串处理工具。
- 动态库(mathutils):数学计算工具。
- 应用程序(myapp):主程序,调用上述两个库。
1.项目结构
每个文件夹都有独立的CMakeLists.txt
,各司其职,这种 “分而治之” 的思想是嵌入式项目管理的精髓。
2. 顶层 CMakeLists.txt
关键点:
add_compile_options
统一设置编译规则。add_subdirectory
让 CMake 自动扫描子目录的配置文件,简化顶层逻辑。
3. 库模块:静态库、动态库
静态库(strutils)配置
关键点:
add_library(strutils STATIC)
:创建静态库,代码将直接嵌入可执行文件。PUBLIC include
:将头文件路径暴露给依赖它的模块,确保其他代码能调用库函数。
动态库(mathutils)配置
关键点::
SHARED
选项:生成独立的动态链接库,可被多个程序复用。- 实际部署时,需确保库文件在系统库路径中,否则运行会报错。
4. 应用程序:整合所有模块
关键点::
target_link_libraries
将静态库、动态库与主程序绑定。PRIVATE include
:仅在应用程序内部使用头文件,不对外暴露。
5. 测试模块
关键点:
- 使用
cmocka
框架编写单元测试。 add_test
定义测试任务,make test
一键运行。
6、编译执行
CMake进阶技巧
1、 交叉编译:在顶层CMakeLists.txt
中添加工具链配置,适配 ARM 等嵌入式平台。
2、代码覆盖率分析:引入CodeCoverage
模块,定位测试盲区
3、自动化部署:通过install
命令,一键将程序和库部署到目标系统
分享一个我创建的实用开源项目汇总仓库:
https://gitee.com/zhengnianli/EmbedSummary gitee.com/zhengnianli/EmbedSummary