Я вижу, что для добавления моих тестов Google (для моего проекта cpp) мне нужно вызвать enable_testing () в корневом исходном каталоге. Может кто-нибудь объяснить, что это на самом деле? Также почему cmake не использует это значение по умолчанию?
Это все, что я смог получить из документации.
Enables testing for this directory and below. See also the add_test() command. Note that ctest expects to find a test file in the build directory root. Therefore, this command should be in the source directory root.





Это устанавливает определение в генераторе CMAKE_TESTING_ENABLED, который, если нет определен, позволяет cmake пропустить большую часть дополнительной обработки, связанной с регистрацией модульных тестов с помощью ctest. (пример)
Основным преимуществом этого является то, что он позволяет вам выборочно включать / отключать генерацию тестов в ваших файлах сборки при вызове cmake.
В качестве примера вы можете поместить следующий фрагмент в корневой каталог CMakeLists.txt file:
Он создает параметр для включения тестов, которые по умолчанию отключены.
option(ENABLE_TESTS "Enable tests" OFF)
if (${ENABLE_TESTS})
enable_testing()
endif ()
Вам нужно сделать это только один раз, в вашем корневом CMakeLists.txt, а в остальных ваших файлах cmake вы можете с радостью вызвать add_test() и т. д., Не беспокоясь о проверке if (${ENABLE_TESTS}) каждый раз.
Когда вы вызываете add_test(...), CMake не будет генерировать тесты, пока не будет вызван enable_testing(). Обратите внимание, что обычно вам не нужно вызывать это напрямую. Просто include(CTest), и он вызовет его за вас.
Моя настройка CMake часто выглядит так:
include(CTest) # note: this adds a BUILD_TESTING which defaults to ON
# ...
if (BUILD_TESTING)
add_subdirectory(tests)
endif ()
В каталоге тесты:
# setup test dependencies
# googletest has some code they explain on how to set it up; put that here
add_executable(MyUnitTests
# ...
)
target_link_libraries(MyUnitTests gtest_main)
add_test(MyUnitTestName MyUnitTests)
Официальный документ такой пул!