2016-12-12 19 views
0

私は常にビルドツリーで実行可能ファイルを実行します(cmakeの「インストール」から実行しません)。ライブラリー、のはそれfruitを呼びましょう、フレームワークとして構築されています:ビルドツリーにrpath項目を追加した実行可能ファイル

add_library(fruit SHARED ${FRUIT_SOURCES}) 
set_target_properties(fruit PROPERTIES FRAMEWORK TRUE) 
set_target_properties(fruit PROPERTIES BUILD_WITH_INSTALL_RPATH TRUE 
          INSTALL_NAME_DIR "@rpath/Frameworks" ) 

は、今私はcmakeのと(executableと呼ばれる)は、メインアプリケーションのカスタムRPATHを設定します。 (私はいつもcmakeのビルドフォルダに自分のアプリケーションを実行して覚えている)私は、生成されたプログラムのための私のrpathsを定義するためにexecutableINSTALL_RPATH targetプロパティを使用することができると思ったが、これはのみインストール、実行のために働くようだ:

# this rpath is not shown in the generated executable (otool -l -v executable): 
set_target_properties(executable PROPERTIES INSTALL_RPATH "@executable_path/lib/") 

ビルドツリーで生成されたプログラムにrpath項目を定義/追加する方法は?

PS。このライブラリfruitは私の実際の問題の単なる例です。ライブラリは、ライブラリにBUILD_WITH_INSTALL_RPATHプロパティを追加するサブcmakeプロジェクト(gitサブモジュール)で作成されます。しかし、私はこのプロジェクトのコードを変更する可能性があります。私の実行可能ファイルをビルドツリーで動作させる良い方法はありますか?

答えて

0

これは主な質問に対する回答ではありませんが、私は脚本の解答を理解しました。これは、主な問題で捜されたものより優れた解決策ですが、私はその問題を持続させます。

set(CMAKE_MACOSX_RPATH TRUE) 
set(CMAKE_SKIP_BUILD_RPATH FALSE) 
set(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE) 

################################################################################ 
# this is more interesting later when we implement install (i.e. creating a 
# bundle on macOS)in this CMakeLists! 
set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib") 
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) 
# the RPATH to be used when installing, but only if it's not a system directory 
list(FIND CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES "${CMAKE_INSTALL_PREFIX}/lib" isSystemDir) 
if("${isSystemDir}" STREQUAL "-1") 
    set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib") 
endif("${isSystemDir}" STREQUAL "-1") 
################################################################################ 

# add the dynamic library 
add_library(fruit SHARED ${FRUIT_SOURCES}) 
set_target_properties(fruit PROPERTIES FRAMEWORK TRUE) 
# remove the properties INSTALL_NAME_DIR and BUILD_WITH_INSTALL_RPATH: 
#set_target_properties(fruit PROPERTIES BUILD_WITH_INSTALL_RPATH TRUE 
#        INSTALL_NAME_DIR "@rpath/Frameworks" ) 

コードはhereから取得されています。このblog postも参照してください。

関連する問題