web-dev-qa-db-ja.com

cmake変数スコープ、add_subdirectory

プロジェクトのルートにCMakeLists.txtがあり、/ srcフォルダーにCMakeLists.txtがあります。/srcフォルダーには、.cppファイル(set (SOURCEFILES main.cpp foo.cpp))を持つ変数のみが含まれ、ルートCMakeLists.txtにはadd_subdirectory(src)を実行し、後でadd_executable(MyApp ${SOURCEFILES})を実行します。

しかし、cmakeは私にエラーを与えます

add_executableが間違った数の引数で呼び出されました。ソースは提供されていません

変数を確認するためにcmakeを取得するにはどうすればよいですか? cmakeはグローバル変数のみを知っていると読みましたが、明らかにそうではありません...

63
blubberbernd

set コマンドのドキュメントで述べたように、add_subdirectoryで追加された各ディレクトリ、またはfunctionで宣言された各関数は新しいスコープを作成します。

新しい子スコープは、親スコープからすべての変数定義を継承します。 setコマンドを使用した新しい子スコープでの変数の割り当ては、PARENT_SCOPEオプションを使用しない限り、子スコープでのみ表示されます。

プロジェクトのルートフォルダーにSOURCEFILES割り当てを表示するには、次を試してください。

set (SOURCEFILES main.cpp foo.cpp PARENT_SCOPE) 
96
sakra