У меня есть проект C ++, использующий cmake
в качестве инструмента для сборки. Моя структура каталогов выглядит следующим образом:
.
├── cmake-build-debug
├── include
├── src
└── tests
Когда я нахожусь внутри cmake-build-debug
, я запускаю cmake ..
, а затем make clean && make && make test
. Я заметил, что запускается только первый юнит-тест. Как настроить мой проект так, чтобы при запуске make test
все модульные тесты запускались? На root мой 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)
Сгенерированная цель test
cmake-build-debug/Makefile
выглядит следующим образом.
# 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")
Есть идеи, что я делаю неправильно?