まず、cmake の構文は非常に単純です。「コマンド」と「引数」で構成されています。単純すぎて、慣れるまでに時間がかかります。すべて「コマンド(引数)」です。さらに、コマンド名は大文字と小文字を区別しません。以前はすべて大文字でなければなりませんでしたが、バージョン 2.6 以降 (私が思うに) は関係ありません。ただし、引数は大文字と小文字が区別されます。
cmake_minimum_required (VERSION 2.6)
このコマンドは、プロジェクトに最低限必要な cmake のバージョンを設定します。cmake の現在のバージョンが 2.6 より前の場合、処理が停止し、エラーが報告されます。これにより、古いバージョンのツールをサポートする必要がなくなります。
set (CMAKE_BACKWARDS_COMPATIBILITY 2.6)
変数 CMAKE_BACKWARDS_COMPATIBILITY を値 2.6 に設定します。CMAKE_BACKWARDS_COMPATIBILITY は 2.6 以降では使用しないでください。スクリプトはおそらくcmake_policy
. これは、以前のバージョンの cmake で矛盾が発生した場合に、新しいバージョンの cmake がどのように動作するかを指定するためのものです。今日ゼロから作成するスクリプトでは、これについて心配する必要はありません。
Project(${PLUGIN_NAME})
プロジェクト名を variable にあるものの値に設定しますPLUGIN_NAME
。この値は、一部の IDE ではプロジェクト名として表示されます。変数に値を書き込むには、と を使用して、次の構文set(PLUGIN_NAME myName)
を使用して値を読み取ることができます。一部のコマンドは変数にも書き込みますが、コマンドと同じように使用します。${}
"${PLUGIN_NAME}"
set
file (GLOB GENERAL RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
[^.]*.cpp
[^.]*.h
[^.]*.cmake
)
file
コマンドです。その最初の引数GLOB
は、「引数として指定するパターンと名前が一致するディスク上のファイルを返す」ことを意味します。次の引数GENERAL
は、結果が格納される変数です。これにより、結果が変数に書き込まれ、set
後で で読み取ることができます${GENERAL}
。RELATIVE
パスは、完全なパスではなく、そのパスに関連するファイル名を返すことを意味します。したがって、"C:\some\long\path\src\foo.cpp" または "/home/me/some/path/src/foo.cpp" ではなく、"src\foo.cpp" または "src/ foo.cpp". 変数 CMAKE_CURRENT_SOURCE_DIR は、CMake が入力する「魔法の変数」であり、この CMakeLists.txt ファイルが存在する現在処理中のソース ディレクトリへのパスを参照します。引数の最後のリストは、一致するファイルのパターンです。基本的に、ファイル拡張子が cpp、h、または cmake のすべて。
include_directories(${PLUGIN_INCLUDE_DIRS})
${PLUGIN_INCLUDE_DIRS}
インクルード ファイルのコンパイラによって検索されるディレクトリに、ディレクトリを追加します。たとえば、gcc でコンパイルすると、余分な「-I」引数が発生します。
# Generated files are stored in ${GENERATED} by the project configuration
# で始まる行はコメントです。
SET_SOURCE_FILES_PROPERTIES(
${GENERATED}
PROPERTIES
GENERATED 1
)
ファイルにはキーと値のペアを関連付けることができ、これはファイルの構築方法に影響します。ここで、変数にリストされているファイルに${GENERATED}
は、プロパティ「GENERATED」が値 1 に設定されています。これはどういう意味ですか? CMake は、別のビルド ステップで作成されるため、ディスク上のファイル "${GENERATED}" を検索しないことを認識しています。投稿されたスニペットでは、誰も変数を設定していません${GENERATED}
。プロジェクトファイルの他の場所に設定されると思います。${GENERATED}
変数とプロパティ GENERATED を混同しないでください! これは微妙な点であり、おそらく変数はGENERATED_FILES
混乱を避けるためにあるべきSET_SOURCE_FILES_PROPERTIES(${GENERATED_FILES} PROPERTIES GENERATED 1)
でした。
SOURCE_GROUP(Generated FILES ${GENERATED})
これにより、グループが作成されます。このグループは、Visual Studio では、変数内のファイルを含む "Generated" というファイル タブに変換されます${GENERATED}
。
SET(SOURCES ${GENERAL} ${GENERATED})
この行は、変数 SOURCES を変数${GENERAL}
andにあるものに設定します${GENERATED}
。${GENERAL}
前に、現在のソース ディレクトリにあった cpp、h、および cmake ファイルのリストを設定しました。C ライクな擬似コードでは、これは "SOURCES = GENERAL + GENERATED" のようなものです。実装の詳細として、値 SOURCES は実際にはリストであり、その内容は ";" で区切られています。文字。通常、これは、後で${SOURCES}
他の 2 つの変数をどこでも繰り返すのではなく、変数を使用するだけでライブラリまたは実行可能ファイルを作成できるようにするために行われます。