CMake實踐:讓CMake管理測試

軟件名稱 軟件版本
Linux操作系統(tǒng) Ubuntu 22.04 LTS(X64)
cmake 3.22.1

CMake可以支持gtest測試用例,具體方法可以參考這里,主要使用到的是include(GoogleTest)gtest_add_tests(TARGET <target>)兩個命令。

gtest_add_tests命令中的<target>指的就是使用gtest框架編寫用例編譯出來的可執(zhí)行文件,可以多次使用gtest_add_tests命令添加不同的測試可執(zhí)行文件,另外要使能測試功能,需要再頂層的CMakeLists.txt文件末尾增加enable_testing()。

example/CMakeLists.txt文件內(nèi)容:

cmake_minimum_required(VERSION 3.22)
project(example)

set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/output) # 設(shè)置可執(zhí)行目標(biāo)文件的輸出目錄
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/output) # 設(shè)置靜態(tài)庫文件的輸出目錄

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文件內(nèi)容:

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)

進(jìn)入example/build目錄執(zhí)行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
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容