XcodeのビルドシステムはGNU Makeではないが,少しカスタマイズすれば,任意のコンパイラやスクリプトを実行することが可能である.ここでは,Octaveのライブラリにリンクするスタンドアロンのバイナリを作成してみる.
まず,Xcodeを起動しプロジェクトを作成する.プロジェクトの種類が並んでいる左側からCommand Line Utilityを選ぶ.右側からStandard Toolを選ぶ.プロジェクト名はhellooとして適当な場所に保存する.プロジェクト名と同じ名前のディレクトリが自動的に作成されて,プロジェクトファイルhelloo.xcodeprojやサンプルソースがこのディレクトリに作成される.
main.cやhelloo.1は不要なので,プロジェクトのウィンドウで選択して削除する.ファイルメニューから新規ファイルを選択してhelloo.ccというファイルを作成する.テンプレートはその他から空のファイルを選ぶ.このファイルにOctaveのマニュアルにある例をコピーして保存.この例にはバグがあるのだが,ここではそのままにしておく.
プロジェクトウィンドウ左側のターゲット,さらにhellooも開く.3段階のフェーズのうち,ソースのコンパイル以外は不要なので削除する.次に,ソースのコンパイルをカスタマイズしてmkoctfileを呼ぶようにする.ターゲット>hellooを選択した状態でボタンバーの情報をクリック.Command+iでもよい.ルールタブをクリックして表示したら,左下の+ボタンをクリックしてルールを追加する.プロセスは同名のファイルとして,*.ccと入力する.使用はカスタムスクリプトとし
/opt/local/bin/mkoctfile --link-stand-alone ${INPUT_FILE_DIR}/${INPUT_FILE_NAME} -o ${TARGET_BUILD_DIR}/${INPUT_FILE_BASE}
と入力する.出力ファイルを追加し
${TARGET_BUILD_DIR}/${INPUT_FILE_BASE}
と入力する.ここで用いた環境変数は,右下のボタン?をクリックして表示されるマニュアルに説明されている.
ビルドをクリックしてビルドしてみる.二重forループの中に
a_matrix(row,column)
となっていればエラー箇所として指摘されているはずである.row, columnは定義されておらず,おそらくi, jの誤りだろう.ここを修正すればコンパイルが通るはずである.
ビルドして実行ボタンをクリックしても,コマンドラインツールなので,何も表示されない.結果はツールからコンソールを選べば表示できる.プロジェクトウィンドウのProductの下に表示されるhellooをダブルクリックするとターミナルが開いてバイナリが実行される.
mkoctfileは,シェルスクリプトで,コンパイルにはg++が呼ばれている.Xcodeでは,g++のエラーメッセージを解釈して,エディタに該当箇所を表示できるので,効率的な開発役立ちそうである.MPIやOpenGLのプログラムは,同様な方法でmpiccやglccを呼べばよさそうである.シェルスクリプトが面倒を見てくれるので,ヘッダやライブラリをプロジェクトに追加する手間が不要だ.C, C++のラッパ以外でも同様の方法で良い.ただし,g95, gfortranだと,エラーメッセージは正しく解釈されない.エラーメッセージは,ソースの上に表示される.