У меня есть небольшой, но нетривиальный проект, который по архитектурным соображениям построен как три отдельных проекта, они взаимозависимы, поэтому, если я не особо сосредоточен или не улучшаю тестовое покрытие, обнаружив дыру, это имеет смысл для меня работать с корнем проекта.
Макет таков:
/CMakeLists.txt
/build/
/src/command-line-application/
/src/command-line-application/CMakeLists.txt
/src/command-line-application/build/
/src/command-line-application/src/
/src/command-line-application/tests/
/src/command-line-application/include/
/src/vlc-plugin/
/src/vlc-plugin/src/
/src/libmyproject/
/src/libmyproject/CMakeLists.txt
/src/libmyproject/build/
/src/libmyproject/src/
/src/libmyproject/tests/
/src/libmyproject/include/
/src/libmyotherproject/
/src/libmyotherproject/CMakeLists.txt
/src/libmyotherproject/build/
/src/libmyotherproject/src/
/src/libmyotherproject/tests/
/src/libmyotherproject/include/
Слово об архитектуре, libmyproject
- настоящая сущность моего приложения, оно построено таким образом, потому что CLI - это ужасный способ доставки кода конечным пользователям, в качестве библиотеки, он также используется из C # и Objective-C приложений. (и все это работает как положено)
libmyotherproject
- это код поддержки конкретной платформы, напрямую не связанный с libmyproject
, он имеет несколько модульных тестов.
vlc-plugin
здесь не важен, за исключением того, что показывает, что не все в /src/*/
имеют модульные тесты.
Мой рабочий процесс обычно заключается в взломе приложения CLI до тех пор, пока не появится что-то полезное, а затем рефакторинг его в библиотеку и обеспечение его переносимости.
Когда я работаю в /src/*/build/
, обычно под управлением cmake ../ && make && ctest --output-on-failure
, все работает.
Когда я работаю в /build
и запускаю cmake
, отдельные компоненты создаются правильно (используя add_subdirectories()
) из CMake, но CTest
не находит рекурсивно тесты.
Документация для CTest
немного бесполезна в том, что вы должны делать:
USAGE
ctest [options]
DESCRIPTION
The "ctest" executable is the CMake test driver program. CMake-generated build trees created for
projects that use the ENABLE_TESTING and ADD_TEST commands have testing support. This program will
run the tests and report results.
Я бы ожидал, что после ADD_TEST()
вызовов в /src/libmyotherproject/tests/CMakeLists.txt
они будут выполняться? (Они по крайней мере компилируются, когда я запускаю cmake
из /build/
)
Я надеюсь, что смог предоставить достаточно информации, спасибо.