tkhrsskの日記

技術ネタなど

はじめてのCMake

まずはcmakeをインストール

Macの場合

https://cmake.org/download/dmg形式をダウンロードして、インストール

コマンドラインを通すには、 sudo "/Applications/CMake.app/Contents/bin/cmake-gui" --installGUI版を起動し、メニューの Tools -> How To Install For Command Line Use で説明が出てくる。

UbuntuLinuxの場合

apt-get -y install cmake

何もしない makeの作成

とりあえず空ファイルの CMakeLists.txt を作って、UNIX Makefileを作ってみる。

$ touch CMakeLists.txt
$ cmake -G "Unix Makefiles"

-GはGeneratorの指定。あらかじめ使える種類は決まっている。--helpを参照。

上記実行後、以下のファイルが出来上がっている。

CMakeCache.txt
CMakeFiles
CMakeLists.txt
Makefile
cmake_install.cmake

make allとかが動く状態になっている。

Hello World

Hello Worldを実行するCのプログラム用のCMakeを作ろう。 ソースフィルは、hello.c。実行ファイルは、helloにしよう。

CMakeLists.txtに以下の記述をする。

project (Hello C)
add_executable(hello hello.c)

projectの二番目以降は言語を指定。C++だったらCXX。複数なら空白区切で並べる。 で、先ほどと同じように cmake後にmakeすれば もう出来上がり。

$ cmake -G "Unix Makefiles"
$ make
Scanning dependencies of target hello
[ 50%] Building C object CMakeFiles/hello.dir/hello.c.o
[100%] Linking C executable hello
[100%] Built target hello
$ ./hello
Hello CMake!

add_executable の 引数に、ソースファイルを増やしていけば、複数のソースからビルドできるようになる。

add_executable(hello hello.c hello2.c hello3.c)

cmakeに対するバージョンを要求することもできる。

cmake_minimum_required (VERSION 2.8)

ディレクトリ構成

buildというディレクトリを作って、そこからcmakeを叩くのが定石らしい。

rm -rf build
mkdir build
cd build
cmake -G "Unix Makefiles" ..
make

といった感じでスクリプトを組む。

コンパイルオプション

CMakeLists.txtに以下の記述をする。

set(CMAKE_C_FLAGS "-Wall")
set(CMAKE_CXX_FLAGS "-Wall")

make verboseするには

set(CMAKE_VERBOSE_MAKEFILE TRUE)