2008-05-08

IDE は難しいので make でビルド

GUI とか、そもそもユーザインタフェースを作るのが苦手なので、自分で使う小さなツールはコマンドラインで使うように作る。

Goolle の GData API の Object-C 版を試してみようと思って、ソースをダウンロードしてきた。サンプルが付いてくるのだけど、これが Xcode のプロジェクトになっている。*.xcodeproj というのを開けば、普通に使えるようになっている。

実際にビルドしてみると去年野良ビルドした libjpeg をリンクしようとして、まずリンクできない。libjpeg はなんに使ったのか覚えてないのだけど、i386 用のものしかインストールされていなくて、これに対して GDataAPI のサンプルのプロジェクトはユニバーサルバイナリを作ろうとする(10.4u の SDK をリンクする)ために ppc 用がないと文句を言うということらしい。しかし、GData のサンプルがなぜ libjpeg をリンクしようとするのかは謎。試しに 10.5 の SDK を使うようにターゲットの設定を変更すると無事ビルドできた。当然のことながら ibjpeg はリンクされていない(SDK を替えるとなぜ libjpeg をリンクしようとしないのかも謎)。

サンプルで一番簡単そうなのは、CalendarHelloWorld というコマンドラインのツールで、Google Calendar に "hello world" という予定を一つ追加するプログラム。これも Xcode のプロジェクトになっているので、Xcode でビルドしてみた。前述のようにしてなんとかビルドできたものの、コマンドラインに引数を与えて実行する方法が分からず(前にやったことがあるのに)、結局 Terminal.app のお世話に……。後で調べなおしたのだが、引数は該当する実行ファイルの情報ウインドウの「引数」タブで設定するらしい(下図)。


前置きが長くなったけど、自分で書くようなプログラムでは、ソースファイルの数も限られているし、細かなオプションも指定しないし、プログラムのソースは vi(vim)で書いて、昔ながらの make を使ってコンパイルしている。

Mac OS X の場合で違うのは gcc に -framework とか -isysroot などのオプションを使うくらいで、他は普通の UNIX と変わらない。 Cocoa のフレームワークを使うファイルが一つだけのプログラムなら、Makefile を書くまでもなく以下のようにするだけ。

cc -framework Cocoa SourceFile.m -o Executable
GData API のサンプルの CalendarHelloWorld をコンパイルするなら次の通り(ただしビルド済みの GData.Framework が既に /Library/Frameworks にインストールされていること)。
cc -framework Foundation -framework GData CalendarHelloWorld.m -o a.out
実際、自分のプログラムはソースの数が極めて少ないので(単純なツールだけど Foundation フレームワークなどの恩恵は受けたい……)、依存関係の記述に困ることもないし、Xcode の IDE を使うよりもずいぶん気楽だ。もちろん、細かい設定をしたいなら、いろいろと詳しいことを調べて正しくたくさんのオプションを設定したりする必要はあるけど……。

参考までに、Xcode のプロジェクトが出来上がっていて、単にビルドするだけなら xcodebuild というコマンドが使える。プロジェクトの設定通りにビルドしてみるだけなら、Xcode を立ち上げなくていいのでこれも手軽。

というわけで、Mac OS X でも簡単なプログラムを書くだけならコマンドラインでもけっこういけますよ、ということと、実は Xcode の IDE の変化についていけてません、という告白。

No comments: