CMake が激しく便利なのでメモ

CUI アプリケーションとかライブラリって割とちまちま Makefile 書いてたんですが、 Makefile あまりにレガシーすぎてググっても 10 年以上前の情報とかしか出てこなくてかなり絶望感高かったのですが、 CMake つかったら思いの外簡単というか便利というか革命的だったのでここに記して置こうと思います。

まず以下のようなフォルダ構成でプログラムを書く

hoge_library
└── src
    ├── hoge
    │    ├── bar.cpp
    │    ├── bar.hpp
    │    ├── foo.cpp
    │    └── foo.hpp
    └── hoge.hpp

CMakeLists.txt を書く

CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
FILE(GLOB SOURCES src/hoge/*.cpp)
SET(CMAKE_CXX_FLAGS "-Wall --std=gnu++11")
INCLUDE_DIRECTORIES("src/")
ADD_LIBRARY(hoge STATIC ${SOURCES})

CMake で Makefile などをジェネレートする

cmake .

普通に make する

make

たった 5 行くらいでなんか Makefile つくれるし革命的に便利。

たとえば突然 clang でビルドしたくなったとき

cmake -DCMAKE_CXX_COMPILER="/usr/bin/clang++" .

とすれば良い。

ただ、 CMake の中間ファイル (Makefile とか) を消すお手軽な方法が無いのはどうにかならないのかなあ。現状以下のようなスクリプトを書いて対処をしている。

#!/bin/sh

rm -rf CMakeFiles CMakeCache.txt cmake_install.cmake Makefile libhoge.a

追記

build などというディレクトリを作り cmake .. と打つと良いよと言われ、それもそうだなと思った。