Objective-Cコンパイル環境をWindows上に構築

WindowsでiPhone iPadアプリが開発できるようになるわけではないのであしからず。。。

## 環境構築
#### 1. Python インストール
インストール手順は割愛
バージョンは、2.7.4をインストールすること。
（2.7.3ではうまく動作しなかったため2.7.4+なら大丈夫かもしれませんが未検証です）

#### 2. MinGW インストール
GNUstepについてはWiki参照　[MinGW](http://ja.wikipedia.org/wiki/GNUstep)
公式サイト [www.mingw.org](http://www.mingw.org/) - Downloads から[mingw-get-setup.exe](http://sourceforge.net/projects/mingw/files/Installer/)をダウンロードしてインストールする


#### 3. GNUstep インストール
GNUstepについてはWiki参照　[GNUstep](http://ja.wikipedia.org/wiki/GNUstep)
[http://www.gnustep.org/experience/Windows.html](http://www.gnustep.org/experience/Windows.html)から以下の3パッケージをダウンロード

* GNUstep MSYS System
* GNUstep Core
* GNUstep Devel

上から順番にインストールしていく

#### 4. PATHの設定
環境変数「PATH」に以下を追加

```dos:PATH
C:\Python27;C:\MinGW\bin;C:\GNUstep\bin;C:\GNUstep\GNUstep\System\Tools;
```
※それぞれ自分のインストールしたパスに置き換えてください

#### 5. LLVM + clang
はじめに、C:\GNUstep\msys\1.0\msys.batからGNUstep Shell を起動する
以下のコマンドを実行し、LLVM および clangのソースを取得する

```dos:GNUstepShell
User@Host ~
$ svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm
$ cd llvm/tools
$ svn co http://llvm.org/svn/llvm-project/cfe/trunk clang
```
（GNUstep Shellのホームディレクトリは、C:\GNUstep\msys\1.0\home\<UserName>にあります）

続いて、~/llvm/tools/clang/lib/Frontend/InitHeaderSearch.cpp (C:\GNUstep\msys\1.0\home\matsuki\llvm\tools\clang\lib\Frontend\InitHeaderSearch.cpp )を編集します

```cpp:InitHeaderSearch.cpp
// FIXME: temporary hack: hard-coded paths.
// 追加 (行：237辺り)
AddPath("C:\\GNUstep\\include", System, false);
AddPath("C:\\GNUstep\\msys\\1.0\\include", System, false);
AddPath("C:\\GNUstep\\msys\\1.0\\include-fixed", System, false);
AddPath("C:\\GNUstep\\lib\\gcc\\mingw32\\4.6.1\\include", System, false);
AddPath("C:\\GNUstep\\lib\\gcc\\mingw32\\4.6.1\\include\\c++", System, false);
AddPath("C:\\GNUstep\\lib\\gcc\\mingw32\\4.6.1\\include\\c++\\mingw32", System, false);
AddPath("C:\\GNUstep\\lib\\gcc\\mingw32\\4.6.1\\include\\c++\\backward", System, false);
AddPath("C:\\GNUstep\\GNUstep\\System\\Library\\Headers", System,false);
// コメントアウト
//AddPath("/usr/local/include", System, false);
break;
```

これで準備が整ったので、make make install していきます

```dos:GNUstepShell
User@Host ~
$ cd ~/llvm
$ mkdir build && cd build
User@Host ~/llvm/build
$ ../configure --enable-optimized --enable-targets=host-only
$ make
$ make install
```
結構時間がかかります、自分の環境で2時間ほどかかりました
最後にエラーがでますが、これは無視して問題無いようです。
完了したらとりあえず動くか確認してください

```dos:GNUstepShell
$ clang --version
clang version 3.4 (trunk 181679)
Target: i686-pc-mingw32
Thread model: posix
```

これで環境構築が完了しました。

## 実際にソースを書いてコンパイルしてみる
GNUstepShellのホーム上に適当に作業フォルダーを作成し、hoge.m GNUmakefileの２ファイルを作成

```dos:GNUstepShell
User@Host ~
$ mkdir work cd work
User@Host ~/work
$ touch hoge.m GNUmakefile
```

```objc:hoge.m
#import <Foundation/Foundation.h>

int main(){
    NSLog( @"Hello");
    return 0;
}
```

```mf:GNUmakefile
include $(GNUSTEP_MAKEFILES)/common.make

TOOL_NAME = Hoge
Hoge_OBJC_FILES = hoge.m

include $(GNUSTEP_MAKEFILES)/tool.make
```
makeファイルの書き方などは色々参考ページがあるので、そちらを参考してください

編集が終わったら早速コンパイルします

```dos:GNUstepShell
User@Host ~/work
$ make CC=clang
```
コンパイルが完了すると、「./obj」以下にコンパイルされたexeができているので、実行するとコンソール上にメッセージが表示されます。

## 最後に
[Appkit](http://wiki.gnustep.org/index.php/AppKit)や[Foundation](http://wiki.gnustep.org/index.php/Foundation)のクラスは結構実装されているため結構遊べそうです
Block構文などはまだサポートしていないものもあるようなので、今後に期待

Objective-Cの勉強や、良いコード思いついたけど手元にWindows PCしか無いじゃないかって時に活躍しそうです。