1. ホーム
  2. scope

[解決済み] cmake の変数スコープ、add_subdirectory。

2023-03-27 06:36:04

質問

私は、私のプロジェクトルートにCMakeLists.txtを持っており、私の/srcフォルダに1つを持っています。src フォルダにあるものは、.cpp ファイルを持つ変数だけを含んでいます ( set (SOURCEFILES main.cpp foo.cpp) ) そして、ルートの CMakeLists.txt では、次のようにしています。 add_subdirectory(src) で、後で add_executable(MyApp ${SOURCEFILES}) .

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

add_executable は不正な数の引数で呼び出され、ソースは提供されません。 が提供されました。

どうすればcmakeに変数を認識させることができるのでしょうか?cmakeはグローバル変数しか知らないと書いてありましたが、明らかにそうではありません...。

どのように解決するのですか?

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

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

を作るために SOURCEFILES の割り当てをプロジェクトのルートフォルダで見えるようにするには、試してみてください。

set (SOURCEFILES main.cpp foo.cpp PARENT_SCOPE)