我試圖設置一個項目,我的存儲庫將所有依賴項作爲git子模塊導入,以便於開發。我的同事可以簡單地克隆回購,git submodule update --init --recursive
,cmake .
和make
,並有一個完全有效的開發環境。目錄結構設置爲在頂層有CMakeLists.txt
一個superbuild是建立使用ExternalProject_Add
的所有子模塊,導致結構如下:爲外部項目設置RPATH?
root
- CMakeLists.txt (superbuild)
- git_submodule_1
- git_submodule_2
- usr
- lib
- include
- my_project
- CMakeLists.txt (project)
的CMakeLists.txt
看起來是這樣的:
SET (INSTALL_PREFIX ${CMAKE_SOURCE_DIR}/usr)
# Install git_submodule_1 with ${INSTALL_PREFIX} as a prefix
ExternalProject_Add(...)
# Install git_submodule_2 with ${INSTALL_PREFIX} as a prefix
ExternalProject_Add(...)
ExternalProject_Add(
MyProject
PREFIX ${CMAKE_SOURCE_DIR}/my_project
DEPENDS ExternalProject_git_submodule_1 ExternalProject_git_submodule_2
SOURCE_DIR ${CMAKE_SOURCE_DIR}/my_project
CMAKE_ARGS
-DCMAKE_LIBRARY_PATH:string=${INSTALL_PREFIX}/lib
-DCMAKE_PROGRAM_PATH:string=${INSTALL_PREFIX}/bin
-DCMAKE_INCLUDE_PATH:string=${INSTALL_PREFIX}/include
# etc, nothing nonstandard here
)
構建過程很好。我在make
的頂層,依賴關係被安裝到usr
,我cd
到my_project
,我做了我的工作,所有建好的共享庫都找到並鏈接了,我很高興。
但是,當我在my_project
內部構建的OS X上運行可執行文件時,我發現無法找到放置在usr/lib
目錄中的動態庫。看起來CMake只設置了在項目目錄內建立的庫的RPATH
,其在這種情況下僅僅是my_project
。
有沒有什麼辦法可以將定製安裝位置添加到RPATH
的構建時庫和可執行文件?
的幾個注意事項:
- 這個問題似乎隻影響OS X.的Linux根本不會出現這些問題。
- 設置
DYLD_LIBRARY_PATH
以包含自定義安裝位置。但是,這增加了設置的額外步驟,並且在嘗試調試安裝問題時會變得煩人。 - 設置
DYLD_FALLBACK_LIBRARY_PATH
也可以,雖然這也不是一個好的選擇,因爲它也增加了一個額外的設置,並且自制軟件用戶不會喜歡這個選項。
這不會有這樣的缺點,寧願自定義庫超過系統的?我試圖設計這個項目來爲開發提供所需的庫,然後在安裝完成後完全依賴於它們。 – Alex