cmake/ctest: возможно ли использовать создание целей сборки в качестве тестов?
У меня есть программа, которая читает описание формата файла (ISO 10303-11 для любопытных) и генерирует из него C++. Сгенерированный код компилируется в библиотеку, и библиотека связана с различными исполняемыми файлами для чтения / записи этого формата файла.
Я настроил CMake для сборки программы генератора и создания библиотек для файлов любого формата, указанного во время конфигурации.
Теперь я хочу добавить тесты. Эти тесты идентичны шагам, которые уже выполнены в процессе сборки. Должен ли я повторить эти шаги в скрипте CTest, или есть ли способ сказать ctest построить цель и перехватить любые сообщения об ошибках?
2 ответа
Если вы используете достаточно свежую версию ctest (последняя официальная версия 2.8.6), то вы можете использовать подпись NAME/COMMAND для add_test вместе с параметром командной строки cmake --build, чтобы создавать конкретные цели в вашем построить дерево.
Например, следующее должно работать, предполагая пользовательскую цель (или библиотеку или исполняемую цель) с именем "tgt1":
add_test(NAME test.build.tgt1
WORKING_DIRECTORY ${CMAKE_BINARY_DIRECTORY}
COMMAND ${CMAKE_COMMAND} --build . --target tgt1 --config $<CONFIGURATION>
)
Это работает кроссплатформенно с одинаковым синтаксисом везде. Он даже работает с мультиконфигурационными генераторами, такими как Visual Studio и Xcode.
Вы пытались сказать enable_testing()
в вашем CMakeLists.txt
файл, затем вызов add_test()
сделать контрольную цель? Я думаю, что вы можете сделать все в одном консолидированном скрипте сборки, если вы будете следовать документации CMake.