Cmake+Ninjaでビルドをやってみる
最近プログラムをビルドするのにCmakeを使い始めてみた。
Cmakeでは、軽量な動作で有名なNinja用のファイルを生成できるらしいので試してみる。
Ninjaのインストール 同名のパッケージにご用心
早速入れてみようと、安直に以下のコマンドを実行。
$ sudo apt -y install ninja
ところが、
$ cmake . -G Ninja
とするとエラーが。
-- The C compiler identification is GNU 5.4.0 -- The CXX compiler identification is GNU 5.4.0 -- Check for working C compiler using: Ninja CMake Error: The detected version of Ninja (0.1.3) is less than the version of Ninja required by CMake (1.3). CMake Error: Internal CMake error, TryCompile generation of cmake failed -- Check for working C compiler using: Ninja -- broken
バージョンが古くて怒られている模様。確かに、
$ ninja --version log: ninja version 0.1.3 initializing
と出るので、バージョンが低いらしい。apt提供のパッケージが古いのか?と思い
$ apt search ninja
とすると、
ninja/xenial,now 0.1.3-2 amd64 [インストール済み] GNU/Linux 用特権昇格検知システム ninja-build/xenial,now 1.5.1-0.1ubuntu1 amd64 small build system closest in spirit to Make ninja-build-doc/xenial,xenial 1.5.1-0.1ubuntu1 all documentation for ninja-build ninja-ide/xenial,xenial 2.3-2 all integrated development environment (IDE) for Python
と出てきた。どうやらさっきのninjaはビルドツールではなかったらしい。
気を取り直して
$ sudo apt -y remove ninja $ sudo apt -y install ninja-build
として入れなおす。これでうまく行くだろう。
ツールチェインの切り替えにご注意
ところが、
$ cmake . -G Ninja -- The C compiler identification is GNU 5.4.0 -- The CXX compiler identification is GNU 5.4.0 -- Check for working C compiler using: Ninja CMake Error: The detected version of Ninja () is less than the version of Ninja required by CMake (1.3). CMake Error: Internal CMake error, TryCompile generation of cmake failed -- Check for working C compiler using: Ninja -- broken
またもやエラー。今度はバージョンが検出されていない模様。
調べてみると、以下のページに行き当たった。
以下引用
"if previously build dir already configured , but ninja executable is moved, cmake didn't report command not found ,but reports "The detected version of Ninja ("") is less than the version of Ninja required by CMake ("1.3") which is confused."
要するに、残骸が残っているとダメということらしい。ということで、
$ rm -rf CMakeFiles CMakeCache.txt cmake_install.cmake Makefile $ cmake . -G Ninja
というふうに残骸を消してやるとうまく行った。
確かに軽量だが出力がログみたいに残らずに消えてしまうのが少し残念かもしれない。