Ситуация: вы разрабатываете библиотеку, которая использует CMake в качестве своей (мета) системы сборки. Библиотека предназначена только для заголовков (на самом деле она нужна, вопрос все еще применим), содержит тесты и примеры (например, тесты производительности). Библиотеку можно использовать, установив ее и используя полученные файлы пакета, или (что зачастую проще избежать несоответствия в ABI), добавив ее как git submodule
и просто add_subdirectory
it.
Вопрос: Как лучше всего обрабатывать тесты в этой библиотеке?
Обычно CMake верхнего уровня будет выглядеть так:
[...setup code, project(...)`]
add_library(foo src/foo.cpp)
target_include_libraries(foo PUBLIC include)
include(CTest)
if(BUILD_TESTING)
add_subdirectory(tests)
endif()
if(FOO_BUILD_EXAMPLES)
add_subdirectory(examples)
endif()
install(TARGETS foo ...)
install(...)
Проблема, с которой я столкнулся, заключается в том, что когда это используется в качестве подмодуля, а в суперпроекте также используются include(CTest)
и BUILD_TESTING
, то включение тестов для суперпроектов включает также тесты подмодуля.
Это то, что следует сделать и ожидать?
Аналогично для команд установки: при установке суперпроекта также устанавливается подмодуль (я думаю), который может быть неправильным, поскольку указанный CMAKE_INSTALL_PREFIX
предназначен для суперпроекта и может не подходить для подмодуля.
Это привело бы к использованию префиксов и опций, таких как FOO_BUILD_TESTING
и FOO_INSTALL
, но я не вижу, чтобы они использовались часто.
Много ли я волнуюсь или что-то упускаю? Как создать (и запустить) тесты и установки для подмодулей git?