C言語が誕生したとき、ほぼ同時にmakeが生まれたようです。
ビルドを自動化するための試みはmakeで終わることなく、続けられた努力は、Autotools (autoconf+automake+libtool)で完成されました。
しかし、洗練されたその方法は一部のエンジニアしか触れない難しいものになってしまっているようです。Makefileは触れるけどMakefile.amは触れないエンジニアを見てきました。数十人規模のエンジニアでautogen.shからcongiure.acとMakefile.amを作れるのが私だけだったときもあります。
何となくなとっつきにくさか、Autotoolsに代わるビルドシステムはいくつも提案されています。
- CMake
- Meson
- Ninja
- Premake
- GYP
- SCons
- Waf
- cargo
どのビルドシステムがデファクトスタンダードになるかは分かりません。もしかしたら永遠にAutotoolsがデファクトなのかもしれません。
今回はCMakeでHelloWorldをやってみます。今回はWSLかLinuxが前提です。
CMake
CMakeはLinux上でmakeを使い、macOS上でXcodeを使い、Windows上ではVisual Studioを使います。どのプラットフォームでも使えるビルドシステムです。
多くの著名なプロジェクトのビルドシステムとして活躍しています。
環境
WSLかLinuxを前提で話を進めます。自宅にVisual Studioを入れていないのですみません。
WSLの入れ方は以下にあります。
>>> お手軽なLinux環境 WSL Windows上のLinuxのインストールとファイル連携
cmakeはaptで簡単にいれることができます。
$ sudo apt install cmake
CMakeLists.txtでHelloWorld
CMakeのマニュアル、チュートリアルは後でゆっくり読むことにしましょう。
makeのMakefileに相当するのがCMakeLists.txtとなります。HelloWorldに必要なのは3行だけです。
cmake_minimum_required(VERSION 3.16.3) project(HelloWorld CXX) add_executable(helloworld hello.cpp)
それぞれの行を説明します。
cmake_minimum_required(VERSION 3.16.3)
cmakeの最低バージョンを書きます。普通、今使っているcmakeのバージョンですね。
以下を実行して、cmakeのバージョンを指定してください。
$ cmake --version
project(HelloWorld CXX)
プロジェクト名と言語を宣言します。プロジェクト名はHelloWorldで言語はC++です。C++はCXXと宣言します。
add_executable(HelloWorld hello.cpp)
add_executableで実行形式のビルドルールを指定します。
ここでは、HelloWorldという実行形式で、ソースファイルはhello.cppだけです。
ビルド方法
上記のようにあるディレクトリにhello.cppとCMakeLists.txtがある状況を考えます。
CMakeList.txtは上記の3行だけとしましょう。
また、ビルドにoutというディレクトリを使用することにします。
※ビルドするためのディレクトリを作るのが慣例ですので作っておきましょう。
以下で、buildするための前準備が整いました。
$ mkdir out $ cd out $ cmake ..
CMakeLists.txtを書き直した時などは、outに下りてcmake ..を再実行してください。
いよいよビルドです。以下でビルドできます。out/HelloWorldがターゲットの実行ファイルになります。
$ cd .. $ cmake --build out
普段の作業では「ソースを修正してcmake –build out」を繰り返すことになります。
まとめ
CMakeでHelloWorldをやってみました。
コメント