一汁三菜

自分が楽しいと思うこと、マラソン、旅行、その他日々の記録をしたい。

CMakeの使いづらい点

better autotoolsを目指して作られているツールにSConsやCMakeという物があります。今回、CMakeを一定期間使ってみる機会があったので、autotoolsに慣れた身として不便に思った点を挙げてみます。「お前がやり方を知らんだけで、CMakeにそういう機能はもうあるよ!」という事がありましたら、教えていただけると凄くありがたいです。

中間ファイル

CMakeは中間ファイルを大量に生成するのですが、その中間ファイルを削除するmake cleanのようなコマンドが無いため、時々うっとうしくなる事があります。findでCMakeFilesや*.cmakeを列挙して削除すれば良いのですが、*.cmakeなんかは自分で手書きする事もあるので、安易にfindで列挙して消すというのは怖い事があります。なので、cmake clean相当の機能はあるとありがたいです。

ソースコードのパッケージ生成

ソースコードのパッケージ生成をする時に、ソースコードのあるディレクトリ中の不要なファイルまでアーカイブに含めようとします。これはCPACK_SOURCE_IGNORE_FILESにアーカイブに含めないファイル名のパターンを指定しておけば解決するのですが、未完成のソースコードが存在する時に一時的にそのコード無しでdaily packageを作りたい、といった場面で不便でした。

複数パッケージの作成

近年のLinuxディストリビューションでは、一つのソースコードから複数のパッケージを生成する事があります。例えばruby-x.y.z.tar.gzからruby, ruby-dev, libruby, ruby-tkを作るといった具合に。全部入りのパッケージを作成するのは非常に簡単なのですが、こういう複数のパッケージを作るのが少し面倒です。

CPackの融通の利かなさ

CMakeの柔軟さとは裏腹に、オプションが少しいじれるだけなので、少しイレギュラーな事をしたくなると一気に不便になります。

最後に

不満ばかりつらつら書き下してきましたが、better automakeなだけあって便利な所はたくさんあります。例えばLinuxWindowsなどでクロスプラットフォームで動作するようなソフトウェアを作成している時には、GNU Make用でもnmake用でもどちらのMakefileも生成してくれるというのはとても便利でした。それだけではなく、Visual StudioのソリューションファイルやEclipseのプロジェクトファイルまで生成できるとあっては脱帽ものです。

それ以外にも、パッケージングにしてもtar玉だけではなくてrpmdebを生成できたり、NSISを使ったWindowsインストーラを作ってくれたりします。こういうクロスプラットフォームな点はなかなかUNIX互換環境に依存したautotoolsには真似の出来ない所ですので、そういう環境で開発をしている人達にとっては非常に便利だと思います。