23

ファイルを生成し、生成されたファイルをコンパイルする CMakeLists.txt を作成しています。グローバル リスト変数にいくつかのファイル パス文字列を追加する関数を作成します。

私のCMakeLists.txt:

set(source_list "nothing")
function(test file_path)
    list(APPEND source_list ${file_path})
endfunction(test)
test(abc.txt)
test(def.txt)
message("At last, the source_list is:\"${source_list}\"")

cmake の出力:

At last, the source_list is:"nothing"

関数の代わりにマクロを使用することを誰かが提案しましたが、ローカル変数を使用する必要があるため、マクロの代わりに関数を使用する必要があります。

関数 test() でグローバル変数 source_list を正しく設定するにはどうすればよいですか? シンプルで通常の方法でcmakeを行うことはできませんか?

4

5 に答える 5

35

PARENT_SCOPE は親専用です。それを表示したい他の非親スクリプトがある場合は機能しません。

真の「グローバルな」変数にはキャッシュが必要です。あなたの場合、次を使用します。

SET(source_list  "${source_list}" CACHE INTERNAL "source_list")
于 2014-08-05T03:05:49.110 に答える
22

親スコープの変数に影響を与えるset代わりに使用する必要があります。list

したがって、listコマンドを次のように置き換えます。

set(source_list ${source_list} ${file_path} PARENT_SCOPE)
于 2012-04-05T16:25:05.380 に答える