У меня есть следующая проблема. У меня есть отдельное дерево {bin, lib, include} на моей машине Linux, где установлены CMake и все мои библиотеки, которые мне нужны для моей разработки. Но только переменная среды PATH установлена в этот каталог bin и по нескольким причинам я не могу установить LD_LIBRARY_PATH. Все программы внутри этого дерева строятся с использованием RPATH. CMake 3.3.1, который я использую, также находится внутри этого дерева.Заставить CMake использовать полный путь библиотеки
Теперь проблема, я хочу, чтобы скомпилировать программу с помощью Libcurl и настроить следующие CMakeLists.txt
PROJECT(EXAMPLE)
CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
SET(CMAKE_SKIP_BUILD_RPATH FALSE)
FIND_PACKAGE(CURL REQUIRED)
FIND_PACKAGE(OpenSSL REQUIRED)
INCLUDE_DIRECTORIES(${CURL_INCLUDE_DIR} ${OPENSSL_INCLUDE_DIR})
SET(LIBS ${CURL_LIBRARIES} ${OPENSSL_LIBRARIES})
ADD_EXECUTABLE(curl_ex src/curl_ex.c)
TARGET_LINK_LIBRARIES(curl_ex ${LIBS})
Когда я теперь запустить CMake завиток и установку OpenSSL из моего личного программного обеспечения дерева найден из-за к тому, что он находится внутри того же префикса, что и CMake.
Но когда я построить проект с использованием make VERBOSE=1
я вижу следующую связывающую команду:
gcc CMakeFiles/curl_ex.dir/src/curl_ex.c.o -o curl_ex -rdynamic -lcurl -lssl -lcrypto
и сборки исполняемого файла относится к общесистемным установлен локон и OpenSSL библиотеки вместо одной CMake, найденных во время конфигурации ,
Как я могу заставить CMake использовать библиотеки, которые он нашел, когда он выполняет привязку?
Это может быть связано с той же проблемой, описанной в политике ['CMP0060'] (https://cmake.org/cmake/help/v3.3/policy/CMP0060.html). В основном рекомендуется использовать [«ИМПОРТИРОВАННЫЕ цели библиотеки»] (https://cmake.org/cmake/help/v3.3/manual/cmake-buildsystem.7.html#imported-targets), где вы можете дать полные пути в 'IMPORTED_LOCATION' или вызвать' cmake_policy (SET CMP0060 NEW) '(поскольку по умолчанию это' OLD'). – Florian
См. [CMake: TARGET_LINK_LIBRARIES с полными библиотеками путей] (https://cmake.org/pipermail/cmake/2014-September/058647.html). И если вы действительно хотите заставить его «target_link_libraries (curl_ex PRIVATE» -l $ ")' (см. [Здесь] (http://public.kitware.com/pipermail/cmake /2014-June/057767.html)). –
Florian