Как добавить зависимость одного исполняемого файла от другого исполняемого файла?

#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 .