簡體   English   中英

為外部項目設置RPATH?

[英]Setting the RPATH for external projects?

我正在嘗試建立一個項目,其中我的存儲庫將所有依賴項導入為git子模塊,以便於開發。 我的同事可以簡單地克隆git submodule update --init --recursivegit submodule update --init --recursivecmake . 並且make與已經制定了完整的工作開發環境。 目錄結構被設置為帶有CMakeLists.txt的超構建,在最頂層使用CMakeLists.txt使用ExternalProject_Add構建所有子模塊,從而產生以下結構:

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 ,我cdmy_project ,我做我的工作,所有的內置共享庫中找到和聯系,我很高興。

但是,當我在my_project內置的OS X上運行可執行文件時,發現找不到放置在usr/lib目錄中的動態庫。 看來CMake只為項目目錄中構建的庫設置RPATH ,在這種情況下,該目錄僅為my_project

有什么方法可以向構建時庫和可執行文件的RPATH添加自定義安裝位置?

一些注意事項:

  • 此問題似乎只影響OSX。Linux根本沒有出現這些問題。
  • DYLD_LIBRARY_PATH設置為包括自定義安裝位置將起作用。 但是,這給安裝增加了一個額外的步驟,當我嘗試調試安裝問題時,它變得很煩人。
  • 設置DYLD_FALLBACK_LIBRARY_PATH也是DYLD_FALLBACK_LIBRARY_PATH ,盡管這也不是一個好選擇,因為它還會添加一個額外的集合,而自制軟件的用戶將不喜歡此選項。

對於使用my_project/CMakeLists.txt構建的可執行文件和共享庫,將${INSTALL_PREFIX}/lib到安裝rpath,並以以下方式使CMake將構建樹中的目標與該安裝rpath鏈接:

set_target_properties(my_exe PROPERTIES INSTALL_RPATH "${INSTALL_PREFIX}/lib")
set_target_properties(my_exe PROPERTIES BUILD_WITH_INSTALL_RPATH ON)

這樣,加載器應在從構建樹運行可執行文件時找到安裝到${CMAKE_SOURCE_DIR}/usr/lib目錄中的外部庫。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM