CMake中RPATH的處理
CMake默認不會對安裝之後的目標,在頭部加上RPATH信息。而對構建產生的中間文件,是會加上RAPTH信息的。RPATH中的路徑信息,來自link_directories()
中指定的庫所在路徑,不管這些路徑,是屬於工程的構建路徑(CMAKE_BINARY_DIR),還是外部路徑。然後在make install
之後,安裝目標的頭部不會增加RPATH。如果恰好那些路徑,不在係統的標準庫查找範圍,這時運行會出現
error while loading shared libraries: xxx
這樣的錯誤信息。
這時,可以通過設置LD_LIBRARY_PATH的環境變量,來告知係統額外的庫查找路徑。
也可以加上
SET(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
來讓CMake在安裝的目標中加入RPATH信息,但是注意即便加了這個,對於位於工程構建路徑的那些PATH,還是不會加入到最終的RPATH當中的。
另外,也可以手動指定添加的RPATH:
SET(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib")
對於這種情況,默認情況下,這個PATH在構建產生的中間文件,是不增加的;而是隻對安裝的目標有效。如果你想針對構建的中間文件也有效果,可以加上
SET(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE)
參考:https://cmake.org/Wiki/CMake_RPATH_handling
最後更新:2017-09-26 13:32:42