Убедитесь, что библиотека доступна до target_link_libraries в CMake Script - PullRequest
0 голосов
/ 21 мая 2019

У меня большой проект, состоящий из нескольких целей сборки с зависимостями между ними.Структура выглядит примерно так:

Application <-- Library I <--- Library II
            <-- Library III <---|
            <-- Library IV

Существует несколько таких приложений, которые используют общий код, распределенный по разным библиотекам.

В рамках проекта CMake используется для обеспечения правильного включения путей и связи между различными библиотеками.

Библиотеки настраиваются с использованием add_library («Библиотека II»), впоследствии другой проект получает зависимости с помощью target_link_libraries («Библиотека I» «Библиотека II»).

Это работает в большинствеслучаи.Однако иногда определенные зависимости не обнаруживаются.У меня есть подозрение, что в некоторых случаях «Библиотека I» не известна.Однако target_link_libraries () не выдает ошибку, если библиотека не известна.Ошибка будет появляться только при компиляции / компоновке.

Я хотел бы убедиться, что при запуске cmake уже найдены все библиотеки.Если на этом этапе sth неизвестно, я хотел бы выдать ошибку и сообщить об этом разработчику.

Я пытался использовать find_libraries (), но в моем понимании это ищет определенный файл.Однако в моем случае файл будет скомпилирован только на этапе компиляции, поэтому файл не существует при запуске cmake.

1 Ответ

0 голосов
/ 21 мая 2019

Проверьте библиотеку target , а не файл:

if(not TARGET library_2)
   message(SEND_ERROR "Attempt to link to non-existent library 'library_2'.")
endif()
target_link_libraries(library_1 library_2)

См. Также этот вопрос о проверке цели.

Примечание,что этот подход будет работать только тогда, когда

add_library(library_2)

предшествует

target_link_libraries(library_1 library_2)

CMake допускает (и правильно обрабатывает) противоположный порядок, но я считаю хорошим вариантом требовать прямого порядка междусоздание библиотеки и создание ссылок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...