У меня есть проект на основе CMake, который состоит из нескольких подкомпонентов, которые могут быть независимо скомпилированы и протестированы.Макет каталога выглядит следующим образом:
.
├── CMakeLists.txt
├── comp1
│ ├── CMakeLists.txt
│ ├── src
│ │ ├── foo.cc
│ │ └── foo.h
│ └── tests
│ ├── CMakeLists.txt
│ └── test_comp1.cc
└── comp2
├── CMakeLists.txt
├── src
│ ├── bar.cc
│ └── bar.h
└── tests
├── CMakeLists.txt
└── test_comp2.cc
Я хочу включить ctest, поэтому в корневом CMakeLists.txt у меня есть include(CTest)
, а в специфичных для компонента файлах CMakeLists.txt у меня есть
if(BUILD_TESTING)
add_subdirectory(tests)
endif()
В compX / tests / CMakeLists.txt у меня есть код для компиляции теста и команда add_test()
.Тесты успешно скомпилированы, и я могу запустить их вручную.Однако, если я позвоню ctest
, он вернет
No tests were found!!!
. Немного поиграв с этим, оказалось, что если я переместу вызов add_subdirectory(tests)
в корневой файл CMakeLists.txt следующим образом:
if(BUILD_TESTING)
add_subdirectory(comp1/tests)
endif()
это работает.Но я нахожу это довольно уродливым и грязным, чтобы поместить специфичные для компонента вещи в корневой файл.
И наоборот, я попытался переместить команду include(CTest)
на один уровень вниз в специфичный для компонента CMakeLists.txt.Но ctest
жалуется на это:
*********************************
No test configuration file found!
*********************************
Серьезно ли существует способ использовать ctest с такой структурой каталогов, как указано выше?