0

私はCMakeを使用して、以降Pという名前の単純なC++プロジェクトを構築しています。Pの構造は非常に単純です。

  • P / src /
  • P / src / package1
  • P / src / packet2
  • P / src/..。
  • P / src / main-app

package1、package2、...のライブラリをP_LIBSという変数に収集したいと思います。

最初の試みでは、package1、package2、...で利用可能なライブラリを、src/CMakeLists.txtファイルで最初に設定されたP_LIBSという変数に収集しようとしました。ただし、サブフォルダーのCMakeLists.txtで行われたP_LIBSの更新は親フォルダーに伝達されません。

メインのCMakeLists.txtファイルにライブラリのリストを書きたくありません。ディレクトリツリーを移動しながら、このような変数を変更したいと思います。

インターネットで検索したところ、有効な提案は見つかりませんでした。さまざまな検索ファイルを見ると、メインのCMakeLists.txtファイルにライブラリの長いリストしか表示されません。

私が上で説明したこと(私は願っています)を行う方法はありますか?


sakraのリンクのおかげで、名前を親フォルダーまで「伝播」することができました。ただし、P_LIBS変数に追加した名前は、CMakeターゲットへの参照としてではなく、後で「ライブラリ」名として解釈されます。言い換えれば、

P_LIBS = {a, b}

'a'と'b'はライブラリ名として解釈されます。つまり、CMakeは以下を生成します。

gcc [...] -l a -o exe

それ以外の

gcc [...] /path/to/a.o -o exe 

(.oまたはその他の拡張子)

4

1 に答える 1

1

おそらくターゲットリストを文字列として構築しています。代わりにリストにしてみてください。例えば:

# in package1/CMakeLists.txt
set(P_LIBS ${P_LIBS} a b PARENT_SCOPE) 
于 2012-12-12T13:39:35.280 に答える