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

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) 

验证步骤

  1. 删除已存在的build目录(如果有)
  2. 重新执行CMake配置:cmake -G "MinGW Makefiles" -B build
  3. 编译项目:cmake --build build
  4. 运行测试:cd build && ctest

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 05:07:37