CTest добавить тесты в подкаталогах - PullRequest
0 голосов
/ 06 февраля 2019

У меня есть проект на основе 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 с такой структурой каталогов, как указано выше?

1 Ответ

0 голосов
/ 24 апреля 2019

Документация CTest не самая ясная.

Проект, над которым я работаю, имеет похожую структуру каталогов, состоящую из различных модулей, и в каждом модуле находятся подкаталоги src и tests.

В документации CMake говорится, что нужно вызывать «enable_testing ()» в файле CMakeLists.txt верхнего уровня, и далее говорится, что эта команда «включит CTest в текущем каталоге и ниже».Что звучит рекурсивно, верно?Ну, это не так.

В каждом CMakeLists.txt должен быть вызван enable_testing () для включения автоматического обнаружения CTest в этом каталоге.

Таким образом, в вашем проекте для верхнего уровня CMakeLists.txt потребуется enable_testing (), тогда comp {1,2} /CMakeLists.txt понадобится, и, наконец, comp {1,2} /tests/CMakeLists.txt понадобится.

После добавления этих команд и повторного запуска cmake,каждый из этих каталогов будет содержать файл CTestTestfile.cmake, который будет искать программа ctest при запуске.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...