У нас есть проект на C++, который имеет относительно большое количество наборов тестов, реализованных в Boost/Test. Все тесты хранятся вне основного дерева проекта, каждый набор тестов находится в отдельном файле .cpp. Таким образом, наша текущая CMakeLists.txt для тестов выглядит следующим образом:CMake + Boost test: игнорировать тесты, которые не могут быть построены
cmake_minimum_required(VERSION 2.6)
project(TEST_PROJECT)
find_package(Boost COMPONENTS unit_test_framework REQUIRED)
set(SPEC_SOURCES
main.cpp
spec_foo.cpp
spec_bar.cpp
...
)
set(MAIN_PATH some/path/to/our/main/tree)
set(MAIN_SOURCES
${MAIN_PATH}/foo.cpp
${MAIN_PATH}/bar.cpp
...
)
add_executable (test_project
${SPEC_SOURCES}
${MAIN_SOURCES}
)
target_link_libraries(test_project
${Boost_UNIT_TEST_FRAMEWORK_LIBRARY}
)
add_test(test_project test_project)
enable_testing()
Он работает нормально, но проблема SPEC_SOURCES
и MAIN_SOURCES
довольно длинные списки и кто-то изредка прорывается что-то в любом из файлов в главном дереве или источников. Это, в свою очередь, делает невозможным создание целевого исполняемого файла и тестирование остальных. Нужно вручную выяснить, что было сломано, перейдите в CMakeLists.txt и закомментируйте части, которые не могут скомпилироваться.
Итак, вопрос: есть ли способ игнорировать тесты, которые не в состоянии автоматически строить в CMake, обобщать, ссылку и запустить остальные (в идеале, разметить те, которые не удалось, как «не удалось построить»)?
Удаленный вопрос Best practice using boost test and tests that should not compile предлагает команду try_compile в CMake. Однако в своей голой форме он просто запускает новый созданный CMakeList (который будет работать не так, как оригинальный), и не имеет никаких крючков для удаления несовместимых единиц.
Ваша самая большая проблема заключается в том, что отправляется неработающий код. – James