CMakeを利用してC++から実行ファイルを作成する単純な例
本ページではクロスプラットフォームなプログラムをビルドする作業に便利なCMakeを利用してC++のソースファイルから実行ファイルを作成する方法について解説します。
要約#
以下のファイルを CMakeLists.txt として作成します。
cmake_minimum_required(VERSION 3.13) # CMake version check
project(sample_project) # プロジェクト名の設定
# SOURCE_FILESという変数にコンパイル対象ファイルの追加
set(SOURCE_FILES main.cpp)
# SOURCE_FILESを利用して sample_project のターゲットに追加
add_executable(${PROJECT_NAME} ${SOURCE_FILES})
# インストール先を指定
install(
TARGETS ${PROJECT_NAME}
DESTINATION bin)
ビルド用のディレクトリを作成し、移動します[1] 。Windowsの場合 PowerShell を利用して同様のコマンドで実施可能です。
mkdir build
cd
CMakeを実行します。 下記コマンドの export は任意のインストールしたいディレクトリへのパスに変更してください。
cmake .. -DCMAKE_BUILD_PREFIX=export
ビルドおよびインストールを実施します。
Linux の場合#
通常のMakefileを利用した生成方式と同じです。
make install
あるいは、 cmake のコマンドでもビルドすることができます。
cmake --build . --taget install
Windowsの場合#
CMake GUIを利用して プロジェクトを開き、 INSTALL という名称のプロジェクトをビルドします。
あるいは、 build ディレクトリの中で cmake の以下コマンドを実行することでも可能です。Linuxでのビルドと結構近しい見た目になりますが、どうしても少しだけ異なってきます。
cmake --build . --target INSTALL --config Release
説明#
CMakeLists.txt に記述している内容について解説します。
cmake_minimum_required#
cmake_minimum_required コマンドはその名の通り、 プロジェクトをビルドする際に必要なCMakeのバージョンを指定します 。大抵の場合、 CMakeLists.txt の先頭に記述されます。
上記の例では 3.13 を指定しているので、上記ファイルを CMake 3.12 などでビルドしようとするとエラーが出てしまいます。
必須のコマンドではないですが、ソースコード配布先などで意図せぬ動作を防ぐためにこちらで動作確認したバージョンを指定しておく方が無難でしょう。また、未指定の場合特定の cmake を実行した際にWarningが出てしまいます。
project#
project コマンドはプロジェクトの名前を設定するコマンドです。 このコマンドは必須です 。
project コマンドで設定した値は PROJECT_NAME という変数に格納されます。本ページの例でも最後に add_executable を実行する際に指定しています。
set#
set コマンドは変数やキャッシュエントリを設定するためのコマンドです。ここでは変数として宣言しています。
後述の add_executable を実施する際にそちらでファイル名を設定することも可能ですが、ソースファイルを明示するためか本ページの例のように変数に入れてから処理することが多いようです。
add_executable#
add_executable はプロジェクトに対して指定したソースコードを利用してビルドされる実行可能ファイルを追加するコマンドです。つまり、 実行可能ファイル名とその実行可能ファイルを生成するのに必要なソースコードを指定します 。
今回の例ではプロジェクトに対して生成するバイナリが1つしか存在しないので、 PROJECT_NAME を指定していますが、複数個のバイナリファイルを生成する場合には適宜名前を付ける必要があります。