簡単に開発できるように、リポジトリがすべての依存関係を git サブモジュールとしてインポートするプロジェクトをセットアップしようとしています。私の同僚は、レポ、、およびを複製するだけでgit submodule update --init --recursive
、cmake .
完全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/lib
CMake は、プロジェクト ディレクトリ内にビルドされRPATH
たfor ライブラリのみを設定しているようです。この場合は.my_project
カスタム インストールの場所をRPATH
ビルド時のライブラリと実行可能ファイルに追加する方法はありますか?
いくつかのメモ:
- この問題は OS X にのみ影響するようです。Linux ではこれらの問題はまったく発生しません。
DYLD_LIBRARY_PATH
カスタム インストールの場所を含めるように設定すると機能します。ただし、これによりセットアップに追加の手順が追加され、インストールの問題をデバッグしようとすると煩わしくなります。- を設定する
DYLD_FALLBACK_LIBRARY_PATH
こともできますが、追加のセットも追加されるため、これも良いオプションではありません。自作ユーザーはこのオプションを好まないでしょう。