1

簡単に開発できるように、リポジトリがすべての依存関係を git サブモジュールとしてインポートするプロジェクトをセットアップしようとしています。私の同僚は、レポ、、およびを複製するだけでgit submodule update --init --recursivecmake .完全makeに機能する開発環境を整えることができます。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、 にインストールcdされmy_project、作業を行い、ビルドされたすべての共有ライブラリが検出され、リンクされました。満足しています。

ただし、OS X でビルドされた実行可能ファイルを実行しようとすると、ディレクトリmy_projectに配置された動的ライブラリが見つからないことがわかります。usr/libCMake は、プロジェクト ディレクトリ内にビルドされRPATHたfor ライブラリのみを設定しているようです。この場合は.my_project

カスタム インストールの場所をRPATHビルド時のライブラリと実行可能ファイルに追加する方法はありますか?

いくつかのメモ:

  • この問題は OS X にのみ影響するようです。Linux ではこれらの問題はまったく発生しません。
  • DYLD_LIBRARY_PATHカスタム インストールの場所を含めるように設定すると機能します。ただし、これによりセットアップに追加の手順が追加され、インストールの問題をデバッグしようとすると煩わしくなります。
  • を設定するDYLD_FALLBACK_LIBRARY_PATHこともできますが、追加のセットも追加されるため、これも良いオプションではありません。自作ユーザーはこのオプションを好まないでしょう。
4

1 に答える 1

1

my_project/CMakeLists.txtインストール rpath に追加してビルドされた実行可能ファイルと共有ライブラリ${INSTALL_PREFIX}/libの場合、次の方法で 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、ビルド ツリーから実行可能ファイルを実行する際に、ディレクトリにインストールされている外部ライブラリを見つける必要があります。

于 2015-09-25T18:49:31.417 に答える