まずはcmakeをインストール
Macの場合
https://cmake.org/download/ でdmg形式をダウンロードして、インストール。
コマンドラインを通すには、 sudo "/Applications/CMake.app/Contents/bin/cmake-gui" --install
※GUI版を起動し、メニューの Tools -> How To Install For Command Line Use で説明が出てくる。
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)