Я пробую CTest в CMake, чтобы автоматически запускать некоторые из моих тестов с использованием make test
target. Проблема в том, что CMake не «понимает», что тест, который я хочу запустить, должен быть построен, поскольку он является частью проекта.
Поэтому я ищу способ явно указать эту зависимость.
dependencies
cmake
ctest
Клаф
источник
источник
check
цель, и они могли столкнутьсяНа самом деле есть способ использовать
make test
. Вам необходимо определить сборку исполняемого файла теста как один из тестов, а затем добавить зависимости между тестами. То есть:источник
Я использую вариант ответа Richq. На верхнем уровне
CMakeLists.txt
я добавляю настраиваемую цельbuild_and_test
для создания и запуска всех тестов:В различных
CMakeLists.txt
файлах подпроектовtest/
я добавляю каждый исполняемый файл теста в зависимости отbuild_and_test
:При таком подходе мне просто нужно
make build_and_test
вместоmake test
(илиmake all test
), и он имеет преимущество только в создании тестового кода (и его зависимостей). Жаль, что я не могу использовать целевое имяtest
. В моем случае это не так уж и плохо, потому что у меня есть сценарий верхнего уровня, который выполняет отладку вне дерева и выпускает (и перекрестно компилирует) сборки, вызывая,cmake
а затемmake
и переводяtest
вbuild_and_test
.Очевидно, что GTest не требуется. Я просто использую / люблю Google Test и хотел поделиться полным примером его использования с CMake / CTest. IMHO, этот подход также имеет то преимущество, что позволяет мне использовать
ctest -V
, который показывает вывод Google Test во время выполнения тестов:источник
Если вы пытаетесь подражать
make check
, вам может пригодиться эта вики-запись:http://www.cmake.org/Wiki/CMakeEmulateMakeCheck
Я только что проверил, что он успешно выполняет то, что написано (CMake 2.8.10).
источник
make check
. Для тестов с преобладающим временем компиляции это делаетctest -R
бесполезным.Избавьте себя от головной боли:
Работает для меня "из коробки" и будет создавать зависимости перед запуском теста. Учитывая, насколько это просто, это почти делает встроенную
make test
функциональность удобной, поскольку дает вам возможность запускать последние тесты компиляции, даже если ваш код сломан.источник
make -j4 all && make test
. И это также ненадежно при использовании инструмента сборки, отличного от Make.Если вы используете CMake> = 3.7, то рекомендуется использовать фикстуры :
Это делает следующее:
test
исполняемую цель, созданную изtest.cpp
test_build
«тест», который запускает Cmake для построения цели.test
test_build
тест как задачу настройки приспособленияtest_fixture
test
тест, который просто запускаетtest
исполняемый файлtest
тест как требующий приспособленияtest_fixture
.Итак, каждый раз, когда
test
нужно запустить тестtest_build
, он сначала запускает тест , который создает необходимый исполняемый файл.источник
$<CONFIG>
не установлен, то--target
станет аргументом для--config
.$<CONFIG>
что всегда непусто. Это выражение генератора для имени конфигурации: cmake.org/cmake/help/latest/manual/ ... Я отредактирую ответ, чтобы заключить его в кавычки, потому что это не имеет значения.cmake
? Я делаю это так:mkdir build; cd build; cmake ..; make
. И похоже, что нет никаких значений по умолчанию, и все связанные переменные пусты, пока неCMAKE_BUILD_TYPE
будут установлены вручную. (в настоящее время на Debian 10, другие платформы не проверял)Вот что я придумал и использовал:
YMMV
источник
Ответ Деррика, упрощенный и прокомментированный:
Это не совсем правильно, так как не решает проблему параллелизма при запуске
ninja all test
, если кто-то это сделает. Напротив, потому что теперь у вас есть два процесса ниндзя.(Ftr, я также разделял это решение здесь .)
источник
Все вышеперечисленные ответы идеальны. Но на самом деле CMake использует CTest в качестве инструментов тестирования, поэтому стандартный метод (я думаю, что это так) для выполнения этой миссии:
Затем запустите cmake и make для создания целей. После этого вы можете либо запустить make test , либо просто запустить
вы получите результат. Это проверено в CMake 2.8.
Подробности см. По адресу: http://cmake.org/Wiki/CMake/Testing_With_CTest#Simple_Testing.
источник
enable_testing()
,add_test()
и т.д. Проблема заключается в том, что он должен вручную выполнить команду сборки до запуска тестов. Он хочет, чтобыmake test
цель автоматически создавала тестовые исполняемые файлы по мере необходимости.Все ответы хороши, но они подразумевают нарушение традиции запускать тест по команде
make test
. Я проделал такой трюк:Это означает, что тест состоит из сборки (необязательно) и запуска исполняемой цели.
источник
make
и теряет возможность CMake генерировать сценарии для других инструментов сборки.