1. ホーム
  2. visual-c++

[解決済み] CMakeを使用して、フォルダ内のすべてのファイルをターゲットに自動的に追加しますか?

2022-04-14 23:57:53

質問

私は、クロスプラットフォームのプロジェクトを、Visual C++、XCode、makefilesの別々のビルド管理システムからCMakeに切り替えることを検討しています。

私が必要とする本質的な機能の1つは、ディレクトリ内のすべてのファイルを自動的にターゲットに追加することです。これは、makeでは簡単にできますが、Visual C++とXCodeでは簡単にはできません(間違っていたら訂正してください)。CMakeで直接それを行うことは可能ですか?どのように?

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

CMake 3.1+ では、開発者が 強くお勧めします を使用することはできません。 file(GLOB または file(GLOB_RECURSE を使用して、ソースファイルのリストを収集します。

注意 ソースツリーからソースファイルのリストを収集するためにGLOBを使用することはお勧めしません。ソースが追加または削除されたときに CMakeLists.txt ファイルが変更されないと、生成されたビルドシステムは CMake にいつ再生成を依頼すればよいのかわからなくなります。CONFIGURE_DEPENDS フラグは、すべてのジェネレータで確実に動作するとは限りませんし、将来、これをサポートしない新しいジェネレータが追加された場合、これを使用するプロジェクトは行き詰まるでしょう。CONFIGURE_DEPENDS が確実に動作するとしても、再構築のたびにチェックを行うにはコストがかかります。

をご覧ください。 のドキュメントはこちら .

2つのグッズの回答があります( [1] , [2] にて、ソースファイルを手動でリストアップする理由を詳しく説明しています。


可能です。例えば file(GLOB :

cmake_minimum_required(VERSION 2.8)

file(GLOB helloworld_SRC
     "*.h"
     "*.cpp"
)

add_executable(helloworld ${helloworld_SRC})

ただし、これには マニュアル を再実行する。 cmake というのも、生成されたビルドシステムは、いつ CMake に再生を依頼すればよいのかわからず、ビルドのたびに依頼するとビルド時間が長くなってしまうからです。

CMake 3.12 以降では、この機能を利用して CONFIGURE_DEPENDS フラグを file(GLOB を使用すると、ビルドが起動されるたびに自動的にファイルリストをチェックし、リセットすることができます。と書くことになります。

cmake_minimum_required(VERSION 3.12)

file(GLOB helloworld_SRC CONFIGURE_DEPENDS "*.h" "*.cpp")

これで少なくとも、ファイルが追加されるたびに CMake を手動で再実行する必要はなくなります。