繁体   English   中英

如何配置我的 CMake 项目以运行所有单元测试?

[英]How do I configure my CMake project to run all unit tests?

我有一个使用cmake作为构建工具的 C++ 项目。 我的目录结构如下所示。

.
├── cmake-build-debug
├── include
├── src
└── tests

当我在cmake-build-debug ,我运行cmake ..然后是make clean && make && make test 我注意到只运行了第一个单元测试。 如何配置我的项目,以便在运行make test时运行所有单元测试? 在根目录下,我的CMakeLists.txt如下所示。

cmake_minimum_required(VERSION 3.10)
project(my_lib)

set(CMAKE_CXX_STANDARD 17)

add_subdirectory(src)
add_subdirectory(tests)

enable_testing()

我的tests/CmakeLists.txt如下所示(配置取自本网站)。

find_package (Boost COMPONENTS system filesystem unit_test_framework REQUIRED)
add_definitions (-DBOOST_TEST_DYN_LINK)

include_directories (../include ${Boost_INCLUDE_DIRS})

file(GLOB TEST_SRCS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} *.cpp)

foreach(testSrc ${TEST_SRCS})
    get_filename_component(testName ${testSrc} NAME_WE)
    add_executable(${testName} ${testSrc})

    target_link_libraries(${testName} ${Boost_LIBRARIES} my_lib)

    set_target_properties(${testName} PROPERTIES
            RUNTIME_OUTPUT_DIRECTORY  ${CMAKE_CURRENT_SOURCE_DIR}/testBin)

    add_test(NAME ${testName}
            WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/testBin
            COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/testBin/${testName}
            )
endforeach(testSrc)

生成的cmake-build-debug/Makefiletest目标如下所示。

# Special rule for the target test
test:
    @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running tests..."
    /usr/bin/ctest --force-new-ctest-process $(ARGS)
.PHONY : test

# Special rule for the target test
test/fast: test

.PHONY : test/fast

生成的cmake-build-debug/CTestTestfile.cmake如下所示。

subdirs("src")
subdirs("tests")

生成的cmake-build-debug/src/CTestTestfile.cmake是空的,但是cmake-build-debug/tests/CTestTestfile.cmake有如下内容。 tests目录下还有更多的test_XYZ.cpp类,这里就不添加了。

add_test(test_Dummy "/path/to/git/my_lib/tests/testBin/test_Dummy")
set_tests_properties(test_Dummy PROPERTIES  WORKING_DIRECTORY "/path/to/git/my_lib/tests/testBin")

关于我做错了什么的任何想法?

enable_testing()在它之后启用add_test() 因此,请确保在要启用的任何add_test()之前调用enable_testing()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM