3

現在、次の構文を使用して RPATH を設定しています。

SET(CMAKE_INSTALL_RPATH   "${CMAKE_INSTALL_RPATH}:$ORIGIN/../lib")

CMakeを使用したバイナリビルドで動作しています。問題は、自動構成スクリプトを使用してCMakeを使用して構築しているサードパーティのバイナリでは機能しないことです。構成に次のコマンドを使用しています。

add_custom_target(
                  third_party_bin ALL
                  COMMAND ./configure
                  --with-ld-opt=\"-Wl,-rpath,${CMAKE_INSTALL_RPATH}\"
                  --prefix=${CMAKE_INSTALL_PREFIX}
                  )

3 番目のパスの configure によって生成された Makefile は次のようになります。

" -Wl,-rpath,':RIGIN/../lib' -lstdc++"

${CMAKE_INSTALL_RPATH}正しく逃げる必要があると思います。次のようなオプションも使用してみました。

add_custom_target(
                  third_party_bin ALL
                  COMMAND ./configure
                  --with-ld-opt=\"-Wl,-rpath,\$\$ORIGIN/../lib\"
                  --prefix=${CMAKE_INSTALL_PREFIX}
                  )

add_custom_target(
                  third_party_bin ALL
                  COMMAND ./configure
                  --with-ld-opt=\"-Wl,-rpath,\\$\$ORIGIN/../lib\"
                   --prefix=${CMAKE_INSTALL_PREFIX}
                  )

しかし、何も機能しません。

値をエスケープする正しい方法は何ですか?

4

2 に答える 2

1

add_custom_target引数を受け入れVERBATIMます。ドキュメントによると:

が指定された場合VERBATIM、コマンドへのすべての引数はビルド ツール用に適切にエスケープされるため、呼び出されたコマンドは各引数を変更せずに受け取ります。add_custom_target 引数を見る前に、1 レベルのエスケープがまだ CMake 言語プロセッサによって使用されていることに注意してください。VERBATIM正しい動作が可能になるため、の使用をお勧めします。が指定されていない場合VERBATIM、ツール固有の特殊文字は保護されないため、動作はプラットフォーム固有になります。

于 2014-05-02T09:51:16.997 に答える
-1

私がこれを正しく読んでいる場合、シェルが $ 変数を解釈することを回避しようとしています...その場合は、二重引用符 (") の代わりに単一引用符 (') を使用してください。シェルは、単一引用符で囲まれた変数を解釈しません。

于 2012-06-27T14:36:50.720 に答える