5

次の点を考慮してください。

SET(TEST_DIR, "test")
INSTALL(PROGRAMS scripts/foo.py DESTINATION ${TEST_DIR})
INSTALL(PROGRAMS scripts/foo.py DESTINATION @TEST_DIR@)

最初のINSTALLコマンドは機能しません。2番目はそうです。何故ですか?これら2つの違いは何ですか?@@構成ファイルの作成のコンテキストを除いて、展開への言及は見つかりませんでした。それ以外はすべて${}展開のみを使用します。

更新: OK、上記の明らかなバグです。コマンドに余分SET()なコンマがあります。それを削除すると、次のようになります。

    SET(TEST_DIR "test")

@@${}展開の両方が機能します。(a) とは@@対照的にの意味は何なのか${}、なぜ前者だけが私の誤ったSET()ステートメントで機能したのか疑問に思っています。

4

2 に答える 2

5

configure_file()ファイルを構成するときのコマンドのドキュメントによると、${VAR}フォームと@VAR@フォームの両方が VAR の値に置き換えられます。上記の経験と私が行ったいくつかのテストに基づいて、CMake があなたCMakeLists.txtの を評価するときに、両方のフォームも置き換えられます。これは文書化されていないため、@VAR@from を使用しないことをお勧めしますCMakeLists.txt

使用する場合は、引数を使用してフォームconfigure_file()のみに置換を制限できることに注意してください。@VAR@@ONLY

于 2013-04-21T04:24:30.587 に答える