CMake实践:让CMake管理测试

软件名称 软件版本
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
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容