2012-01-19 21 views
6

私はCMakeLists.txtにカスタムコマンドを持っている:私は "testtouch VERBOSE = 1を作る" を実行すると、私はそれが実行されることがわかりコマンドを実行するときにCMakeがスペースの前にバックスラッシュを付けるのはなぜですか?

set(testfiles "test1 test2") 
add_custom_target(testtouch COMMAND touch ${testfiles}) 

touch test1\ test2 

これは一例ですが、私は実際のプロジェクトでこの問題を抱えており、 "\"はコマンドを破っています。 Findスクリプトから変数(ここではtestfiles)を取得するだけで、二重引用符を取り除くことはできません。

なぜCMakeはそれをしますか?

どうすればよいですか?

答えて

5

時々、cmakeリスト変数型とcmake文字列リテラルの違いが重要になるためです。

は、問題を回避するために、次の変数の設定を変更してください:

set(testfiles "test1" "test2") 
+0

は、あなたの答えをいただき、ありがとうございます。私は別のスクリプトからそれを受け取るので、私は変数の設定を変更することはできません。同じように変数を操作することはできますか? – Barth

+0

自分自身に返信:私はそれを動作させるために次の行を使いました:文字列( "" "testfile $ {testfiles}) – Barth

+0

これは" -o outfile "のようなオプションを渡す場合でも保持されます。これを文字列として渡す機会はありません。私たちはリスト "-o; outfile"としてそれを供給する必要がありますが、直観に反します。 –

関連する問題