Есть ли способ найти путь к библиотеке динамически в CMake? - PullRequest
1 голос
/ 22 октября 2019

У меня есть libcurl.so в трех разных направлениях. допустим, /usr/lib, /opt/a/.../lib/, /opt/b/.../lib/

Я хочу связать нужную библиотеку при сборке. Как написать CMakeLists.txt для этого?

На данный момент я жестко запрограммирован, чтобы найти его в /usr/lib/

project (mylib)

find_library(LIB_CURL_LIBRARY NAMES curl HINTS "/usr/lib/")

target_link_libraries (mylib curl)

1 Ответ

1 голос
/ 22 октября 2019

Команда find_library фактически выполняет поиск во многих местах, которые также могут настраиваться пользователем (человеком, который использует проект CMake с вызовом find_library, но не изменяет CMakeLists.txt).

Кроме того, с помощью HINTS и PATHS вы (как разработчик проекта) можете добавить дополнительные подсказки для поиска, и эти подсказки также могут быть изменены пользователем.

Вы можете найти полное описание путей поиска. в документации .

Когда вы решаете, как заставить find_library искать по определенному пути, вам нужно "классифицировать" источник этого пути. Некоторые распространенные случаи:

  1. Является ли путь стандартным для конкретной ОС или дистрибутива? Если это так, CMake обычно ищет этот путь по умолчанию.

  2. Путь идет от пользовательской установки пакета? Если это так, пользователь может назначить префикс установки некоторой переменной (например, XXX_ROOT, где XXX - имя или сокращение пакета), который используется как PATHS или HINTS в вашем find_libraryвызов.

  3. Путь идет от префикса пользовательской установки , общего для многих пакетов ? Если это так, пользователь может назначить этот общий префикс переменной CMAKE_PREFIX_PATH, и find_library автоматически примет этот префикс.

Обратите внимание, что find_library обычно используется вмодуль FindXXX.cmake (который активируется через find_package(XXX)). Такой модуль может включать дополнительную логику для поиска дополнительных возможных местоположений библиотеки в соответствии с самоанализом системы.

...