2016-10-17 99 views
1

在Linux上構建CMake後(但在安裝之前),所有鏈接庫都添加到最終可執行文件的RPATH中。預先安裝到RPATH中

但是,我想預先$ORIGIN/../lib:到這個RPATH。

到目前爲止,我只能夠取代的RPATH,這不是我想要的東西:我想ld.so先在../lib看。這是我目前做的:

set_target_properties(foo PROPERTIES 
    BUILD_WITH_INSTALL_RPATH TRUE 
    INSTALL_RPATH "\$ORIGIN/../lib:...") 

雖然這個工作,它缺少的是不是我的構建樹的一部分,一些額外的第三方庫,誰不位於系統目錄。

chrpath -l foo給了我上面完全一樣的INSTALL_RPATH。如果我沒有設置這些屬性,我會得到很多DSO位置,例如RPATH=/bar/baz/:/quux/等(我想預先考慮的那個)。

我使用get_property(_existing_rpath foo INSTALL_RPATH)嘗試過,但是這給了我一個空字符串

我在https://cmake.org/Wiki/CMake_RPATH_handling閱讀提示,發現在「CMake的錯誤」是

至少在CMake的2.6。 4 RHEL5,用於 的man cmake命令INSTALL_RPATH_USE_LINK_PATH假定此設置將附加 指向指定的任何CMAKE_INSTALL_RPATH內容的鏈接路徑。不過, 這個版本,啓用INSTALL_RPATH_USE_LINK_PATH將取代它。

哦,不是如此肯定更多:只是驗證了這一點上CMake的 2.8.0,現在在版本它在cmake_install.cmake列表正確的改變。這個bug可能是由於以前沒有執行每個目標安裝(),或者可能是由於CMake RPATH相關變量中的其他更改導致的。

順便說一句,我只得到一個工作RPATH爲文件,在其運行安裝之前感興趣。我沒有正確配置安裝(添加安裝目標等)。我需要研究這部分工作嗎?

回答

0

如果您在Google上找不到答案,答案通常很明顯。這似乎只是很好地工作:

set_target_properties(foo PROPERTIES 
    BUILD_WITH_INSTALL_RPATH TRUE 
    INSTALL_RPATH_USE_LINK_PATH TRUE 
    INSTALL_RPATH "\$ORIGIN/../lib:${INSTALL_RPATH}") 

在我的系統(和CMake的3.6.1),似乎INSTALL_RPATH始於結腸,但我不會指望它。另外,由於我很明顯地在這裏設置了全球INSTALL_RPATH,所以可能會被過分指定(我沒有檢查過)。

相關問題