1. ホーム
  2. makefile

[解決済み] Cmakeビルドシステムで、ディレクトリ内のすべての*.cファイルを使用するにはどうすればよいですか?

2023-06-04 23:17:03

質問

あるディレクトリの下にあるすべての.cファイルを探し出し、それらをすべてSRCファイルに追加してcmakeでコンパイルしたいのです。CMakeList.txtでどうすればいいのでしょうか?

通常のmakefileで作成できるのは

SPECIFIED_SRC_FILE  = $(foreach d,$(SPECIFIED_SRC_DIRS),$(wildcard $(addprefix $(d)/*,*.c)))

が、CMakeList.txtでこのようなことをするにはどうしたらいいのかがわかりませんでした。

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

これを試してみてください。

AUX_SOURCE_DIRECTORY

ディレクトリ内の全てのソースファイルを検索します。

AUX_SOURCE_DIRECTORY(dir VARIABLE) 

指定されたディレクトリにある全てのソースファイルの名前を集め を収集し、そのリストを指定された変数に格納します。このコマンドは、明示的なテンプレートのインスタンス化を使用するプロジェクトで使用することを目的としています。 このコマンドは、明示的なテンプレートのインスタンス化を使用するプロジェクトで使用されることを意図しています。 テンプレート・インスタンス化ファイルは "Templates".サブディレクトリに格納することができ、このコマンドを使用して自動的に収集されます。 サブディレクトリに保存し、このコマンドを使用して自動的に収集することで、すべてのインスタンス化を手動で一覧表示する必要がなくなります。 すべてのインスタンス化を手動でリストする必要はありません。

このコマンドを使用して、ライブラリまたは実行可能なターゲットのソース ファイルのリストを記述しないようにすることは魅力的です。 ファイルのリストを書かないようにするために、このコマンドを使用したくなります。これはうまくいくように見えますが CMake が新しいソース ファイルが追加されたことを認識するビルド システムを生成する方法はありません。 新しいソースファイルが追加されたことを知るビルドシステムを生成する方法はありません。通常、生成されたビルドシステムは CMakeLists.txt ファイルが新しいソースを追加するために変更されるため、生成されたビルドシステムは CMake の再実行が必要なときを知ることができます。 が変更され、新しいソースが追加されるからです。このファイルを変更せずに、ソースを単に ディレクトリに追加されただけで、このファイルを変更しない場合、ビルドを生成するために CMake を手動で再実行する必要があります。 CMake を再実行し、新しいファイルを組み込んだビルド システムを生成する必要があります。