STM32 CubeMX生成CMake项目的主机测试环境配置问题
解决方案
1. 恢复主机默认编译配置
CubeMX生成的CMake项目会全局设置交叉编译工具链,导致测试项目也沿用嵌入式编译器。要在Test子目录的CMakeLists.txt开头重置编译配置,让CMake自动识别主机编译器(VS2022/Clang)并适配Ninja:
# 清除CubeMX设置的交叉编译缓存变量 unset(CMAKE_TOOLCHAIN_FILE CACHE) unset(CMAKE_C_COMPILER CACHE) unset(CMAKE_CXX_COMPILER CACHE) unset(CMAKE_ASM_COMPILER CACHE) unset(CMAKE_C_COMPILER_FORCED) unset(CMAKE_CXX_COMPILER_FORCED) # 初始化测试项目,触发CMake自动检测主机编译器 project(UnitTests LANGUAGES C CXX) # 强制指定Ninja生成器(若构建时未通过`cmake -G Ninja`指定,可添加此配置) set(CMAKE_GENERATOR "Ninja" CACHE INTERNAL "" FORCE) # 可选:优先使用Clang编译器(按需启用) # set(CMAKE_CXX_COMPILER clang++ CACHE STRING "C++ compiler" FORCE) # set(CMAKE_C_COMPILER clang CACHE STRING "C compiler" FORCE)
2. 关联主项目的头文件与源文件
在Test子目录的CMakeLists.txt中,添加主项目的头文件包含路径,并引入需要测试的自有源文件(避开STM32硬件相关代码,如HAL库文件):
# 添加主项目的头文件目录(路径根据实际项目结构调整) include_directories(${PROJECT_SOURCE_DIR}/../Inc) # 移除主项目的嵌入式相关编译定义(避免干扰测试代码) # 定义名称需和主项目CMakeLists中的保持一致 remove_definitions(-DUSE_HAL_DRIVER -DSTM32F4xx) # 创建测试可执行文件,关联需要测试的自有代码 add_executable(UnitTests # 本地测试代码文件 test_cool_stuff.cpp # 主项目中需要测试的源文件 ../Src/cool_stuff.cpp ) # 若有其他需要测试的源文件,直接追加即可
3. 构建与运行
在项目根目录的构建文件夹中,执行以下命令即可分别构建嵌入式目标和测试目标:
# 初始化构建目录(首次执行) cmake -G Ninja .. # 构建嵌入式主项目 ninja <你的嵌入式目标名称> # 构建并运行测试项目 ninja UnitTests ./UnitTests
内容的提问来源于stack exchange,提问作者Olx
相关产品推荐
相关产品推荐

