我有以下問題。我在我的Linux機器上有一個獨立的{bin,lib,include}樹,其中安裝了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})
當我現在運行C進行卷曲和OpenSSL的設置我的個人軟件樹的發現,由於事實上,它駐留在與CMake相同的前綴內。
但是當我建立使用make VERBOSE=1
我看到下面的鏈接命令的項目:
gcc CMakeFiles/curl_ex.dir/src/curl_ex.c.o -o curl_ex -rdynamic -lcurl -lssl -lcrypto
和構建可執行文件指的是全系統的安裝捲曲和OpenSSL庫,而不是一個C進行配置過程中發現。
如何強制CMake使用它在執行鏈接時找到的庫?
這可能與策略['CMP0060'](https://cmake.org/cmake/help/v3.3/policy/CMP0060.html)中描述的相同問題有關。它主要建議使用[「IMPORTED庫目標」](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 $」)'(參見[here](http://public.kitware.com/pipermail/cmake) /2014-June/057767.html))。 –
Florian