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 .. と打つと良いよと言われ、それもそうだなと思った。