2010-07-28 58 views
18

我正在使用CMake在Linux上構建一個程序。該程序編譯成功並從項目構建目錄運行。該方案是在目錄中的自定義庫鏈接${HOME}/build/lib使用CMake創建二進制文件刪除運行時路徑

我有一個安裝階段有:

install(TARGETS ProgName RUNTIME DESTINATION bin) 

當我運行make install程序被放置在正確的位置,但cmake安裝程序會刪除運行時來自二進制的路徑。

-- Install configuration: "Debug" 
-- Installing: *binary name* 
-- Removed runtime path from "*binary name*" 

我看了網上討論LD_LIBRARY_PATH變量的誤用,所以我想如果可能守我僅限於系統庫的位置上的文章。我不是系統管理員,所以我無法將該位置添加到默認鏈接程序搜索路徑。

有沒有人知道如何在安裝或至少自定義哪些路徑添加到運行時時保持開發時鏈接路徑?

乾杯

回答

9

注意:如果你不希望修改cmake腳本本身,圍繞設置屬性,你可以啓動cmake,指令要求不要刪除運行時路徑:
請參閱「Variables that Control the Build」,其變量爲:「CMAKE_SKIP_RPATH

如果爲true,則不要添加運行時路徑信息。

如果將其設置爲TRUE,則rpath信息不會添加到已編譯的可執行文件中。
默認情況下,如果平臺支持它,則添加rpath信息。這允許從構建樹中輕鬆運行。
要在安裝步驟中省略RPATH,而不是構建步驟,請改爲使用CMAKE_SKIP_INSTALL_RPATH

如果傳遞已包含正確的運行時路徑,那麼該指令將避免cmake對包含在所述傳遞中的當前運行時路徑進行任何修改。

cmake -DCMAKE_SKIP_RPATH=ON xxx.cmake 
+2

超級!謝謝,比第一個答案要好得多! – Davide 2013-04-11 16:22:59

+0

+1,謝謝你的回答,正是我在找的東西,即讓CMake *表現得像*它應該默認做的那樣! – 2016-11-08 15:48:12

0

這適用於CMake 2。8

set_target_properties(foo PROPERTIES INSTALL_RPATH_USE_LINK_PATH TRUE) 

其中foo是你定義的目標更早:

project(foo) 
add_executable(foo ...) 
    ... 
install(TARGETS foo DESTINATION bin) 
    ... 

之前

% sudo make install 
Install the project... 
-- Install configuration: "" 
-- Installing: /opt/mystuff/bin/foo 
-- Removed runtime path from "/opt/mystuff/bin/foo" 

% sudo make install 
Install the project... 
-- Install configuration: "" 
-- Installing: /opt/mystuff/bin/foo 
-- Set runtime path of "/opt/mystuff/bin/foo" to "/opt/zzyzx/lib:/opt/bar/lib/x86_64"