Xcode4.6.xでMakefileを使ってビルド・デバッグするには

## はじめに
プロジェクトの都合で、ビルドシステムに化石のようなMakeを使わなければならない場合もあるかと思います。でも、自分のマシンではXcodeで開発したいんだ！　という人もいるでしょ？　でしょ？
そんな人のためのセットアップドキュメントです。

## 筆者の検証環境
・Xcode4.6.3
・GNU Make 3.81

## まずはXcodeプロジェクトを作りましょう。

まずは、Xcodeプロジェクトを作りましょう。
メニューのFile->New->Project...を選択し、出てきたダイアログで`Command Line Tool`を選択し、Nextボタンを押します。
![スクリーンショット 2013-08-07 11.32.34.jpg](https://qiita-image-store.s3.amazonaws.com/0/12753/794222cf-ec96-6f84-1e6f-1654019fc1ec.jpeg)

次の画面で、`Project Name`を適当に入力します。ここでは「PracticeMakefile」としました。
`Type`は`C`でも`C++`でもどちらでもいいですが、ここでは`C`にします。
![スクリーンショット 2013-08-07 11.35.25.jpg](https://qiita-image-store.s3.amazonaws.com/0/12753/6c79c6b8-f32a-8f28-3543-1e0b6f92db20.jpeg)

Nextボタンを押します。

次のファイル指定ダイアログで、プロジェクトの保存先を指定します。

こんな感じのプロジェクトができました。
![スクリーンショット 2013-08-07 11.37.31.jpg](https://qiita-image-store.s3.amazonaws.com/0/12753/9c6095e5-33b9-fdfc-292c-47d173ad5a01.jpeg)

## Make用のターゲットを追加する。

メニューのFile->New->Target...を選択し、OSX->Other->External Build Systemを選択し、Nextボタンをクリックします。
![スクリーンショット 2013-08-07 11.43.17.jpg](https://qiita-image-store.s3.amazonaws.com/0/12753/62f52970-785b-67f1-5729-0a680f44273d.jpeg)

次の画面で、`Product Name`を適当に入力します。ここでは「Make」としました。`Build Tool`が`/usr/bin/make`となっていることを確認してください。
![スクリーンショット 2013-08-07 11.44.19.jpg](https://qiita-image-store.s3.amazonaws.com/0/12753/96139f0b-f93a-a082-afdf-27c4bb38eed2.jpeg)
Finishボタンを押します。

## Makefileを作成・追加する。

今回は例ですので、以下のような超シンプルなMakefileを書いてみます。
（-gオプションを忘れないでください。これがないとデバッガ使えません）

```mf:
all: main.c
	gcc -Wall -g -o main main.c
```

できたMakefileを、プロジェクトに追加します。
![スクリーンショット 2013-08-07 11.46.08.jpg](https://qiita-image-store.s3.amazonaws.com/0/12753/805a5e90-ef06-0a0e-05c0-b8f20e1d1f7c.jpeg)

## 一度、コマンドラインでmakeを実行する。

ここで一度、コマンドラインでmakeを実行します。この先の手順で、Xcodeで実行可能ファイルを指定する必要があり、実行可能ファイルの実体が必要なためです。

## Makeスキーマの設定

### ディレクトリの指定
プロジェクトウィンドウの左ペインから、プロジェクト「PracticeMakefile」を選択し、その右隣のペインでターゲット「Make」を選択します。そしてその右のペインの`Info`タブをクリックすると、以下のような画面になります。ここで、`Directory`のフィールドに`$(PROJECT)`と入力してください。あるいは、プロジェクトフォルダへのフルパスを入力してもかまいません。
![スクリーンショット 2013-08-07 11.57.49.jpg](https://qiita-image-store.s3.amazonaws.com/0/12753/92727f0b-4ae7-9f2b-5f59-fbd5cedf229d.jpeg)

### 実行可能ファイルの指定

メニューの`Product->Scheme->Edit Scheme`を選択し、出てきた画面で、上部のSchemeで「Make」を選びます。次に、左ペインのRun->Runを選択し、右側のペインでInfoタブを押します。
![スクリーンショット 2013-08-07 11.51.35.jpg](https://qiita-image-store.s3.amazonaws.com/0/12753/60deec4e-ad7d-1eb0-4f0a-42811dc5d34d.jpeg)

Excutableの`None`をクリックし、出てきたメニューで`Other...`をクリック、出てきた選択ダイアログで、先ほどmakeして作成した実行可能ファイル「main」を選びます。

![スクリーンショット 2013-08-07 11.53.08.jpg](https://qiita-image-store.s3.amazonaws.com/0/12753/848b2884-baf0-f4ca-72cf-2d077cc68e50.jpeg)

選択し終えたら、OKボタンを押します。

## いよいよビルド、実行！

プロジェクトウィンドウ左上のRunボタンを押して、ビルド・実行してみましょう。成功するはずです。
ブレークポイントをしかければ、そこでちゃんと止まることも確認できます。
![スクリーンショット 2013-08-07 19.48.57.jpg](https://qiita-image-store.s3.amazonaws.com/0/12753/b7f64966-13ed-5c39-906c-46cf002fc063.jpeg)

## Makefileのターゲットを指定するには

Makefileのターゲットが複数あったとして

```mf:
hello: main.c
	gcc -Wall -O2 -g -o hello main.c
hello2: main.c
	gcc -Wall -O2 -g -o hello2 main.c
```

hello2を実行したい場合は、
プロジェクトウィンドウの左ペインから、プロジェクト「PracticeMakefile」を選択し、その右隣のペインでターゲット「Make」を選択します。そしてその右のペインの`Info`タブをクリックすると、以下のような画面になります。ここで、`Arguments`のフィールドに`hello2`と入力してください。
![スクリーンショット 2013-08-07 18.35.27.jpg](https://qiita-image-store.s3.amazonaws.com/0/12753/45d38a74-5d72-3f51-ae27-632a167af482.jpeg)

これで、hello2のターゲットが実行されるようになります。

## おわりに

いかがでしたでしょうか。プロジェクトが大きくなり、いずれ再帰的なMakefile構成になったとしても、多分このやり方でいけると思います。
Make+VimやMake+Emacsで十分という方もいらっしゃるかもしれませんが、やはりXcodeの豊富な開発支援機能の魅力は捨てがたいものがあります。
そこで、マカーな人ならMake+Xcodeというわけです。
ビルドシステムが古風な分、他はリッチな環境で行こうではありませんか。