Поиск библиотеки локальных каталогов с помощью CMake - PullRequest
0 голосов
/ 10 февраля 2019

У меня есть проект с именем myproject, с каталогом сборки myhome/myproject/build.

У меня есть библиотека с именем libmylibrary.so, которая живет в myhome/folder/lib с заголовками в myhome/folder/include

Тогда у меня есть CMakeLists.txt в myhome/myproject, который выглядит следующим образом:

cmake_minimum_required(VERSION 3.5.1)                                                                                                                                                                       
project (myproject)
file(GLOB SOURCES "src/*.cpp")
add_executable(myproject ${SOURCES})

find_library(MYLIB mylibrary REQUIRED)
target_link_libraries(myproject PRIVATE mylibrary)

Я запускаю cmake ../ в каталоге сборки, а затем make, и я получаю:

/usr/bin/ld: cannot find -lmylibrary
collect2: error: ld returned 1 exit status

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

Как я могускажите [что-то, что нужно знать], где находится моя библиотека, чтобы CMake мог ее найти, без того, чтобы она была жестко запрограммирована в сценарии CMake?Спасибо.

Спасибо

1 Ответ

0 голосов
/ 10 февраля 2019

Для подсказки CMake о расположении библиотеки вы можете установить переменную CMAKE_LIBRARY_PATH в каталог, который содержит необходимую библиотеку:

cmake -DCMAKE_LIBRARY_PATH=myhome/folder/lib <other-cmake-arguments>

В качестве альтернативы, если ваша библиотека содержится в lib/ подкаталог, вы можете намекнуть на верхний каталог с помощью переменной CMAKE_PREFIX_PATH:

cmake -DCMAKE_PREFIX_PATH=myhome/folder/lib <other-cmake-arguments>

Последний способ также намекает на другие команды find_*, для получения дополнительной информации см. мой ответ .

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