您好,我正在使用 cmake 集成 Gtest 并对示例 C 代码执行测试。 我使用 GCC 13.2.0 x86_64-mingw32(mingw64) 和 VScode。 下面我提到了目录结构以及根cmakelist和子级cmakelist。
目录结构:
.
├── CMakeLists.txt
├── googletest
├── sourcecode
│ ├── CMakeLists.txt
│ └── calculator.c , calculator.h
│
└── testSource
├── CMakeLists.txt
└── calculator_test.cpp
MakeLists.txt
cmake_minimum_required(VERSION 3.8)
set(This NAME_FOR_PROJECT)
project(${This} C CXX)
project(${This} VERSION 1.0.0)
set(CMAKE_C_STANDARD 99)
set(CMAKE_C_STANDARD_REQUIRED ON)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_STANDARD 11)
set (CMAKE_POSITION_INDEPENDENT_CODE ON)
include(CTest)
enable_testing()
add_subdirectory(googletest)
add_subdirectory(sourcecode)
add_subdirectory(testSource)
源代码/MakeLists.txt
set(This Sourcecodes)
set(Sources
calculator.c
)
set(Headers
calculator.h
)
add_library(${This} SHARED ${Sources} ${Headers})
testSource/MakeLists.txt
cmake_minimum_required(VERSION 3.8)
set(This gtestSources)
set(Sources
exampletest.cpp )
add_executable(${This} ${Sources})
target_link_libraries(${This} PUBLIC
gtest_main
Sourcecodes
)
target_include_directories(${This} PUBLIC sourcecode)
target_link_directories(${This} PUBLIC sourcecode)
add_test(
NAME ${This}
COMMAND ${This}
)
测试源/calculator_test.cpp
#include<gtest/gtest.h>
#include<sourcecode/example.h>
TEST(Exampletest, Exampletest_calculator){
EXPECT_EQ(calculator('+',4,5), 9);
EXPECT_EQ(calculator('+',4,5), 10);
}
测试源/计算器.h
#include<stdio.h>
float calculator (char op, int num1, int num2);
构建后,我收到错误致命错误:calculator.h:没有这样的文件或目录
有人可以让我知道我在这里缺少什么吗?
问题是测试确实看到了来自
Sourcecodes
目标的 proepr 包含目录。
要修复它,您应该将 public incldue 目录添加到 Sourcecodes
目标:
添加到
sourcecode/CMakeLists.txt
target_include_directories(Sourcecodes PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
这意味着将当前源目录添加为将链接的任何目标的包含目录
Sourcecodes
。
详情请参阅doc。
请注意,在
testSource/MakeLists.txt
中,您错误地使用了 target_include_directories
。
旁注:
${This}
变量已过时。它使 cmake 代码变得更加复杂,但没有任何好处。