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.

Другие вопросы по тегам