web-dev-qa-db-ja.com

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

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

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

138
martjno

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

cmake_minimum_required(VERSION 2.8)

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

add_executable(helloworld ${helloworld_SRC})

生成されたビルドシステムはCMakeにいつ問い合わせるかわからないため、ソースファイルが追加または削除された場合、cmakeの再実行がmanualを必要とすることに注意してください。再生成し、すべてのビルドで実行すると、ビルド時間が長くなります。

196
Kleist

Kleistによる答えは確かに機能しますが、重要な注意事項があります。

Makefileを手動で記述する場合、すべての.cppおよび.hファイルを選択する関数を使用して、SRCS変数を生成できます。ソースファイルが後で追加された場合、makeを再実行するとそのファイルが含まれます。

ただし、CMake(file(GLOB ...)などのコマンドを使用)はファイルリストを明示的に生成し、自動生成されたMakefileに配置します。新しいソースファイルがある場合は、Makefileを再実行してcmakeを再生成する必要があります。

編集:Makefileを削除する必要はありません。

30
kara deniz