12

MacOS の CMake でターゲットに複数の RPATH ディレクトリを設定するにはどうすればよいですか? Linux では、コロンで区切られたリストを使用できます。

set_target_properties(mytarget
    PROPERTIES
    INSTALL_RPATH "\$ORIGIN/../lib:\$ORIGIN/../thirdparty/lib"
)

MacOS では、コロンで区切られたリストを技術的に追加してotool -l表示することができますが、これらのディレクトリは検索されません。

set_target_properties(mytarget
    PROPERTIES
    INSTALL_RPATH "@loader_path/../lib:@loader_path/../thirdparty/lib"
)

通常、MacOS で複数の RPATH ディレクトリを持つ場合、複数のリンカー フラグを送信すると、これらのフラグはotool -l. 何かのようなもの:

g++-mp-4.7 mytarget.cpp -o mytarget -Wl,-rpath,@loader_path/../lib,-rpath,@loader_path/../thirdparty/lib

これにより、次のことが得られます。

Load command 15
          cmd LC_RPATH
      cmdsize 32
         path @loader_path/../lib (offset 12)
Load command 16
          cmd LC_RPATH
      cmdsize 48
         path @loader_path/../thirdparty/lib (offset 12)

この動作を CMake で再現するにはどうすればよいですか?

4

1 に答える 1

16

ドキュメントによると、パスはコロンではなくセミコロンで区切る必要があります。

set_target_properties(mytarget
    PROPERTIES
    INSTALL_RPATH "@loader_path/../lib;@loader_path/../thirdparty/lib"
)

または、コマンドsetを使用して、CMake でセパレーターを処理できるようにします。

set(MY_INSTALL_RPATH
    "@loader_path/../lib"
    "@loader_path/../thirdparty/lib"
)
set_target_properties(mytarget
    PROPERTIES
    INSTALL_RPATH "${MY_INSTALL_RPATH}"
)

編集:(コメントをありがとうTsyvarev)

または、set_property複数値のプロパティを受け入れるコマンドを使用します。

set_property(
    TARGET mytarget
    PROPERTY INSTALL_RPATH
    "@loader_path/../lib"
    "@loader_path/../thirdparty/lib"
)
于 2016-10-20T07:25:03.553 に答える