Ctest не находит тесты catch2 с подкаталогом - PullRequest
0 голосов
/ 07 апреля 2020

Мне кажется, что мой проект CTest не распознает мои тесты Catch2. Сам тестовый проект работает нормально, и мне удается запустить тесты, используя созданный им исполняемый файл. Однако при запуске

ctest -V

Выходные данные, которые я продолжаю получать:

UpdateCTestConfiguration  from :/home/user/code/project/libs/DartConfiguration.tcl
UpdateCTestConfiguration  from :/home/user/code/project/libs/DartConfiguration.tcl
Test project /home/user/code/project/libs/
Constructing a list of tests
Updating test list for fixtures
Added 0 tests to meet fixture requirements
Checking test dependency graph...
Checking test dependency graph end
No tests were found!!!

Моя установка выглядит следующим образом:

Структура папок:

libs
├── maths
│   ├── matrix.cpp / hpp
│   ├── function.cpp / hpp
│   └── CMakeLists.txt
├── ctest
│   ├── matrix_test.cpp
│   ├── function_test.cpp
│   └── CMakeLists.txt
├── build

└── CMakeLists.txt

Я строю из папки сборки

cmake ..
cmake --build .
ctest -V

CMakeLists.txt в ctest

set(SOURCE_FILES
    main.cpp
    maths/matrix_test.cpp
    maths/function_test.cpp
)

# find the Catch2 library 
find_package(Catch2 REQUIRED)

# create a test executable
add_executable(ctest ${SOURCE_FILES})

target_link_libraries(ctest maths Catch2::Catch2)

include(CTest)
include(ParseAndAddCatchTests)
ParseAndAddCatchTests(ctest)

Основные CMakeLists. txt

# set CMake version
cmake_minimum_required(VERSION 3.10 FATAL_ERROR)

project(mathlib LANGUAGES CXX)

set(CMAKE_CXX_STANDARD 17)

set(CMAKE_SHARED_LIBRARY_PREFIX "lib")

include(GNUInstallDirs)
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY
${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR})
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY
${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR})
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY
${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_BINDIR})

set(LIB_BASE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../libs")

find_package(Catch2 REQUIRED)
enable_testing()

add_subdirectory("${LIB_BASE_DIR}/maths" maths)
add_subdirectory("${LIB_BASE_DIR}/ctest" ctest)

include(CTest)
include(Catch)
catch_discover_tests(var_ctest)

add_test(
    NAME catch_test
    COMMAND $<TARGET-FILE>:ctest --success
)

Я посмотрел здесь рецепты, кулинарную книгу cmake, modern-cmake, страницу catch2 github, но мне кажется, что я упускаю что-то очевидное, так как по какой-то причине тесты не поднимаются. Я не смог найти пример с add_subdirectory, поэтому может быть, что это приводит к другой настройке.

Если я запускаю

./bin/ctest

, все тесты работают нормально. Так что сам исполняемый файл в порядке.

...