You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过CMake正确构建基于cmocka的C语言单元测试

解决CMake链接cmocka构建单元测试的方案

1. 参考项目结构

先明确典型的项目目录结构,方便对应配置:

.
├── src
│   ├── main.c
│   └── apple.c          # 被测试的业务代码文件
├── tests
│   └── test_apple.c     # cmocka单元测试代码
└── CMakeLists.txt

2. 修改后的CMakeLists.txt配置

# 指定最低CMake版本要求
cmake_minimum_required(VERSION 3.10)

# 定义项目名称与使用的编程语言
project(apples_project C)

# 设置C语言标准并强制启用
set(CMAKE_C_STANDARD 99)
set(CMAKE_C_STANDARD_REQUIRED ON)

# 构建主程序可执行文件
add_executable(apples src/main.c src/apple.c)

# 通过pkg-config查找cmocka库的依赖信息
find_package(PkgConfig REQUIRED)
pkg_check_modules(CMOCKA REQUIRED cmocka)

# 构建单元测试可执行文件
add_executable(test_apple tests/test_apple.c src/apple.c)

# 为测试目标配置cmocka的链接与编译参数
target_link_libraries(test_apple PRIVATE ${CMOCKA_LIBRARIES})
target_include_directories(test_apple PRIVATE ${CMOCKA_INCLUDE_DIRS})
target_compile_options(test_apple PRIVATE ${CMOCKA_CFLAGS_OTHER})

# 注册测试(可选,支持用ctest批量运行测试)
enable_testing()
add_test(NAME apple_unit_tests COMMAND test_apple)

3. 关键配置说明

  • cmocka依赖查找:使用pkg_check_modules可以自动读取cmocka的.pc配置文件,无需手动硬编码头文件路径、链接库路径等信息,适配不同系统的安装环境。
  • 测试目标依赖:单元测试需要依赖业务代码(如src/apple.c)和cmocka库,所以构建测试可执行文件时要包含业务源文件,再通过target_link_libraries关联cmocka库。
  • 编译参数传递:CMOCKA_CFLAGS_OTHER会包含cmocka要求的编译参数(如-fPIC、警告选项),确保编译过程兼容。

4. 验证操作步骤

  1. 进入build目录:cd build
  2. 重新生成构建文件:cmake ..
  3. 编译所有目标:make
  4. 运行测试:直接执行./test_apple,或用ctest批量运行注册的测试

如果你的业务代码是编译为库而非直接引用源文件,可调整为如下配置:

# 将业务代码编译为静态库
add_library(apple_core STATIC src/apple.c)

# 主程序链接业务库
target_link_libraries(apples PRIVATE apple_core)

# 测试程序链接业务库与cmocka
target_link_libraries(test_apple PRIVATE apple_core ${CMOCKA_LIBRARIES})

内容的提问来源于stack exchange,提问作者Jon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 15:54:57