#cmake
#cmake
Вопрос:
Зависимостью между библиотеками и библиотеками исполняемый файл можно управлять с помощью target_link_libraries . Поэтому, если в какой-либо библиотеке не удается выполнить сборку — все зависимые цели не будут построены.
У меня есть другая задача: существуют цель библиотеки, цель исполняемого теста (которые предоставляют тест для библиотеки) и основная цель исполняемого файла с основной логикой.
Мне нужно, чтобы основная исполняемая цель должна быть собрана только в том случае, если сборка исполняемой тестовой цели не завершается сбоем.
Другими словами, мне нужно настроить зависимость между двумя исполняемыми файлами.
Как я мог этого добиться? Может кто-нибудь привести пример?
Комментарии:
1. Что не так с командой add_dependencies?
2. @Tsyvarev, хорошо, спасибо. Я думал, что любая команда без префикса «target_» устаревает, и существует модерный способ.
3. «Современный» CMake предпочитает целевые команды «глобальным». Команда
add_dependencies
отлично ориентирована на цели, даже при отсутствииtarget_
префикса.
Ответ №1:
Тестирование — это другой этап в наборе CMake / Ctest / CPack, поэтому вы вряд ли найдете способ условной компиляции / компоновки исполняемого файла на основе результатов тестирования.
Вы можете использовать add_dependencies
, чтобы убедиться, что сначала выполняется сборка тестового исполняемого файла, но это не то же самое, что только создание продукта сборки для успешного выполнения теста.
Я рекомендую запустить вашу сборку с последующим тестированием. На основе кода возврата теста вы можете выбрать, упаковывать или нет конечный продукт.
Комментарии:
1. Правильно ли я понимаю, что мне нужен add_custom_target, который запускает тесты и add_dependencies из этой цели?
2. Я бы решил эту проблему за пределами
CMakeFile.txt
. Выполните полную сборку. Запуститеmake test
или как бы вы ни вызывали CTest, затем запуститеmake package
, если тестовый запуск завершится успешно.3. Вам нужно определить свои тесты с
add_test
помощью и вызватьenqble_testing()
где-нибудь ваши файлы CMake, а затем запуститьmake test
.