CMake集成Google Test编译报错:找不到calculator.h文件
问题分析与解决:CMake集成Google Test时头文件找不到错误
问题描述
使用CMake集成Google Test测试C代码,环境为GCC 13.2.0 x86_64-mingw32(mingw64) + VSCode,编译时报错:fatal error: calculator.h: No such file or directory。
目录结构
. ├── CMakeLists.txt ├── googletest ├── sourcecode │ ├── CMakeLists.txt │ └── calculator.c , calculator.h │ └── testSource ├── CMakeLists.txt └── calculator_test.cpp
错误原因及修正步骤
1. 测试文件头文件引用错误
测试代码calculator_test.cpp存在两处错误:
- 引用了不存在的
sourcecode/example.h,实际应引用calculator.h - 头文件引用路径错误,不需要带sourcecode前缀(正确配置包含目录后直接引用即可)
修正后的testSource/calculator_test.cpp:
#include <gtest/gtest.h> #include "calculator.h" TEST(Exampletest, Exampletest_calculator){ EXPECT_EQ(calculator('+',4,5), 9); EXPECT_EQ(calculator('+',4,5), 10); }
注:删除testSource目录下多余的
calculator.h,头文件需统一放在sourcecode目录中。
2. sourcecode库未导出包含目录
sourcecode的CMakeLists.txt未设置头文件包含目录的导出,导致测试程序无法自动找到头文件路径。
修正后的sourcecode/CMakeLists.txt:
set(This Sourcecodes) set(Sources calculator.c ) set(Headers calculator.h ) add_library(${This} SHARED ${Sources} ${Headers}) # 导出当前目录作为库的包含目录,链接该库的目标会自动继承此路径 target_include_directories(${This} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
3. testSource的CMakeLists.txt存在多处错误
Sources变量指定的文件名错误(写了exampletest.cpp,实际测试文件是calculator_test.cpp)- 多余的
target_link_directories配置(链接库时CMake会自动处理路径,无需手动指定) - 手动添加的
target_include_directories可移除,因为链接Sourcecodes库时会自动继承其包含目录
修正后的testSource/CMakeLists.txt:
cmake_minimum_required(VERSION 3.8) set(This gtestSources) set(Sources calculator_test.cpp ) add_executable(${This} ${Sources}) target_link_libraries(${This} PUBLIC gtest_main Sourcecodes ) add_test( NAME ${This} COMMAND ${This} )
4. 根目录CMakeLists.txt优化(可选)
根目录的CMakeLists中重复调用了project命令,可合并为一次:
cmake_minimum_required(VERSION 3.8) set(This NAME_FOR_PROJECT) project(${This} VERSION 1.0.0 C CXX) set(CMAKE_C_STANDARD 99) set(CMAKE_C_STANDARD_REQUIRED ON) set(CMAKE_CXX_STANDARD 11) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_POSITION_INDEPENDENT_CODE ON) include(CTest) enable_testing() add_subdirectory(googletest) add_subdirectory(sourcecode) add_subdirectory(testSource)
验证步骤
- 删除已存在的build目录(如果有)
- 重新执行CMake配置:
cmake -G "MinGW Makefiles" -B build - 编译项目:
cmake --build build - 运行测试:
cd build && ctest
内容的提问来源于stack exchange,提问作者user22364407
相关产品推荐
相关产品推荐

