软件名称 | 软件版本 |
---|---|
Linux操作系统 | Ubuntu 22.04 LTS(X64) |
cmake | 3.22.1 |
CMake可以支持gtest测试用例,具体方法可以参考这里,主要使用到的是include(GoogleTest)
和gtest_add_tests(TARGET <target>)
两个命令。
gtest_add_tests命令中的<target>指的就是使用gtest框架编写用例编译出来的可执行文件,可以多次使用gtest_add_tests命令添加不同的测试可执行文件,另外要使能测试功能,需要再顶层的CMakeLists.txt文件末尾增加enable_testing()
。
example/CMakeLists.txt文件内容:
cmake_minimum_required(VERSION 3.22)
project(example)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/output) # 设置可执行目标文件的输出目录
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/output) # 设置静态库文件的输出目录
add_subdirectory(src)
add_subdirectory(lib)
target_link_libraries(main mylib)
if (DEBUG)
target_compile_definitions(mylib PRIVATE DEBUG_INFO)
endif()
set(CMAKE_INSTALL_PREFIX /home/shengyi/install/my_test)
install(TARGETS main DESTINATION bin)
install(TARGETS mylib DESTINATION lib)
install(FILES lib/mylib.h DESTINATION include)
enable_testing()
example/src/CMakeLists.txt文件内容:
FIND_PACKAGE(GTest
CONFIG REQUIRED
PATHS /home/shengyi/install/gtest/lib/cmake/GTest)
if (GTest_FOUND)
GET_PROPERTY(include_def TARGET GTest::gtest PROPERTY INTERFACE_INCLUDE_DIRECTORIES)
GET_PROPERTY(library_def TARGET GTest::gtest PROPERTY INTERFACE_LINK_LIBRARIES)
MESSAGE("Found gtest libs, include: ${include_def}, library: ${library_def}")
ADD_EXECUTABLE(main main.cpp)
TARGET_LINK_LIBRARIES(main GTest::gtest)
endif()
include(GoogleTest)
gtest_add_tests(TARGET main)
进入example/build
目录执行cmake ..
、make test
后输出如下:
$ make test
Running tests...
Test project /home/shengyi/code/gitee_repo/projects/cmake/example/build
Start 1: FirstTest.testcase1
1/1 Test #1: FirstTest.testcase1 .............. Passed 0.00 sec
100% tests passed, 0 tests failed out of 1
Total Test time (real) = 0.00 sec