1

私はcmake2.8.8を使用しています。そして、ソースファイルのリストを取得する関数にそれらが存在するかどうかをチェックさせ、CMakeList.txtで使用する必要がある別の変数に存在するファイルを配置したいと思います。これが私の関数です。

function(SetSources SourceList Sourceses )

message(STATUS "Sourcelist " ${SourceList})

foreach(SRC ${SourceList})

FILE(GLOB Sourceses ${SRC})

message(STATUS "Sources " ${Sourceses})

endforeach(SRC)

endfunction(SetSources)

これが私が自分の関数と呼んでいるものであり、どの引数をそれにプッシュするかです

set(SourceList plugincustomresourcemgr.cpp PluginCustomResourceDLL.cppextendedarchive.cpp)

set(Sourceses)

SetSources(SourceList Sourceses)

出力フォーム

message(STATUS "Sourcelist " ${SourceList})

--SourceList SourceList

これは合格値ではありません。私が間違っていることと、関数の引数をどのように処理する必要があるか

4

2 に答える 2

2

cmake の関数には固定数の引数があることがわかりました (c/c++ のように) 変数を定義するとき、${} を使用して値を関数に渡す必要があります。変数に複数の値があり、関数が引数を 1 つしか取得しない場合、関数は最後の値を取得します。参照で変数を渡さない場合($ {})関数は、値のような変数の名前を取得します。

私の問題を解決するために、引数を取得しないマクロを定義しました

macro(checkSources)

foreach(SRC ${SourceList})

file(GLOB Sources ${SRC})

endforeach(SRC)

endmacro(checkSources)

変数「SourceList」と「Sources」が現在の CMakeList.txt で定義されている場合、これは正常に機能します。

file(GLOB Sources ${SourceList})

しかし、これはcmakeをテストする例です。

于 2012-07-25T11:42:31.093 に答える