はじめに
仕事でCMakeLists.txtと出会い、画期的で驚きました。
ということで、共有です。
Linux, WSLで簡単にビルドできます。
ただ、CMakeLists.txtの内容を書くのも難しいと思います。
まずはCMakeLists.txtとは・・・、なんてのも面倒臭い。
CMakeLists.txtを理解するには、簡潔に2言で
・CMakeLists.txtは、CMakeの設定ファイル
・CMakeはコンパイラに依存せずビルドを自動化するためのツール
ぐらいでいいです。
気になる方は私が学習に使った参考サイトへ飛んでください。
参考サイト
かみのメモ
※このサイトを一番読みました。
CMakeの使い方
実践C++ 応用講座CMake編
目次
使いこなすために簡単な流れを目次として書き出します。
まずはビルド
ファイルの準備
まずは以下のファイルを作ります。
.
├── CMakeLists.txt
└── sampleApp.cpp
sampleApp.cppには以下の内容を書きます。
#include <iostream>
int main(void)
{
std::cout << "Hello,World" << std::endl;
}
いよいよ、CMakeLists.txtの内容を書きます。
cmake_minimum_required(VERSION 3.1)
project(sampleApp CXX)
add_executable(sampleApp sampleApp.cpp)
これで準備完了です。
ビルド
実際にビルドしてみます。
mkdir build
cd build
cmake ..
cmake --build .
これにて、buildフォルダに実行ファイル(sampleApp)が作られます。
ファイル実行
$ ./sampleApp
Hello,World
coutで記載したメッセージがコンソールに出力されます。
記述内容について説明
CMakeLists.txtに記述した内容について説明していきます。
cmake_minimum_required(VERSION 3.1)
project(sampleApp CXX)
add_executable(sampleApp sampleApp.cpp)
- cmake_minimum_required
- CMakeのバージョンを指定。
- 今回は
VERSION 3.1
を指定しています。
- project
- プロジェクト名とプロジェクトで使用するプログラム言語を指定。
- プロジェクト名
sampleApp
とし、C++を指定しています。
- add_executable
- ビルドする実行ファイル名とそれを構成するソースファイルを指定。
- 実行ファイル名
sampleApp
としてます。 - 構成するソースファイルは
sampleApp.cpp
一つになります。 - 複数のソースファイルからビルドする場合は、
add_executable
の内容を以下にします。CMakeLists.txtadd_executable(sampleApp sampleApp1.cpp sampleApp2.cpp)
ConfigureとGenerate
この項目ではビルドする際に打ったコマンドについて説明したいと思います。
mkdir build
cd build
cmake ..
cmake --build .
CMakeのビルドでは、ConfigureとGenerateという2つの作業をします。
コマンドで説明すると3行目のcmake ..
になります。
Configureは、CMakeLists.txtをCMakeに実行させてビルドに必要な情報を収集する作業をします。
Generateは、Configureで集めた情報を基に自分の開発環境に合わせたプロジェクトファイルの生成をします。
3行目のcmake ..
では、CMakeLists.txtを置いたディレクトリを..
で指定し、Configureを実施します。
CMakeLists.txtの記載に問題があれば、ここでエラーが出ます。
Configure実施後、収集した情報からGenerateし、プロジェクトファイルを生成します。
このConfigureとGenerateで、いくつかの中間ファイルとプロジェクトファイルが生成されるので、ディレクトリ内が汚れてしまいます。
そのために1, 2行目で作業ディレクトリを作っています。
4行目のcmake --build .
について、.
は作業ディレクトリを指定します。
作業ディレクトリは、ConfigureとGenerateで生成した中間ファイルとプロジェクトファイルのあるディレクトリになります。
ここではbuild
ディレクトリになります。
また、裏でmake
コマンドを起動しているので、make
でもビルドできます。
最後に
以上で終了です。
ご参考になれば幸いです。
関連記事
- 【初心者向け】CMakeLists.txtを使ってビルドする。
- 【初心者向け】CMakeLists.txtを使ってincludeのpathを省略する。
- 【初心者向け】CMakeLists.txtを使ってlibraryをリンクする。