来るべきマルチプラットフォーム時代に備えるためにpremakeを使ってみた

# はじめに
 * [えーでるわいす](http://edelweiss.skr.jp/)では、長らくVisualStudioを使ってゲームを開発しており、僕がサークルを手伝うようになってプロジェクト構成(*.vcprojとか*.sln)の整理役を買って出てからというもの、もりもり自作のプロジェクトファイル自動生成Pythonスクリプト(通称、VCプロジェクト自動でつくる君)を整備し、GUIでポチポチ設定してる人を鼻で笑いながら、こんな便利な物は世の中に無いぞ！と長らく(3年ぐらい前まで?)井の中の蛙状態だったわけです。<BR>
```
※「VCプロジェクト自動でつくる君」とは、とてもシンプルなテキスト形式な定義ファイル(.module)をツールに通せば、美しい.vcprojとか.slnを吐いてくれるツール(実は当初、Xcodeなど他のプラットフォームも視野に入れてたりしてたりしてなかったりラジ(ry
```

## .moduleの中身はこんな感じ。
````
# ----------------------------------------------------------
# プロジェクト定義ファイル
# ----------------------------------------------------------

# プロジェクトの種類( exe | dll | lib )
type			= exe

# プロジェクト名
project			= Nev

# 実行ファイルのエクスポート先
export/default 	= ../../build/$(ProjectName)_$(ConfigurationName).exe
export/final 	= C:/SOILWorks/NEV/ExeRoot/Astebreed.exe

# 定義
define			= WIN32;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;
define/debug	= _DEBUG;_TGL_DEBUG;_HAS_ITERATOR_DEBUGGING=0;
define/profile	= NDEBUG;_PROFILE;_TGL_RELEASE;_SECURE_SCL=0;_HAS_ITERATOR_DEBUGGING=0;
define/release	= NDEBUG;_RELEASE;_TGL_RELEASE;_SECURE_SCL=0;_HAS_ITERATOR_DEBUGGING=0;
define/final	= NDEBUG;_RELEASE;_TGL_FINAL;_SECURE_SCL=0;_HAS_ITERATOR_DEBUGGING=0;

# ソースディレクトリ
srcdir			= ..\src

# 追加インクルードディレクトリ
includedir	 = ..\..\..\common\ext\DirectX\include;
includedir	+= ..\..\..\common\ext\vectormathlibrary\include\vectormath\cpp;
includedir	+= ..\..\..\common\tgl\include;
includedir	+= ..\..\..\common\tgl\src;
includedir	+= ..\..\..\common\ext\bullet\src;

あともう少し続く。。。

```
<h3>そして見つけてしまったのです・・・VSのプロジェクトを自動生成してくれる優秀なツール共を！orz

# 世界で活躍するマルチプラットフォームプロジェクト自動生成ツール達
 * [CMake](http://www.cmake.org/)
  * 今のところ一番メジャー。多くのOSSなプロジェクトで使われてる。
 * [GYP](https://code.google.com/p/gyp/)
  * Google製。Pythonで実装されてる。node.js で採用されてる。
 * [premake](http://industriousone.com/premake)<BR>
  * 定義ファイルがLua。exeファイル一個でとてもシンプル。今回えーでるわいすで試そうとしているツール

# 結局何が便利なの？
 * マウスでポチポチ設定しなくてもイイので、時を重ねカオスになりがちなプロジェクト設定がとても美しくなる！
  * マウスでポチポチやってると、リリースビルドが通らない！マスタービルドが通らない！ってよくなりがち。

 * マルチプラットフォーム対応(x32/x64/linux/macなど)が割りと楽
  * Xcodeなどのプロジェクト生成まではやってくれる。
  * プラットフォーム毎の固有の値が綺麗に書ける(ファイル・定義など)

 * GUIとかダサくない？漢は黙ってコマンドラインでしょ！

# とりあえず、premakeをサクッと使ってみた
```
(!)注意(!) premakeはバージョンによってluaの書き方が全く変わってしまうので、ググるときはpremake4で
```
 1. [ここ](http://sourceforge.net/projects/premake/files/Premake/)から、とりあえず一番新しいやつ(premake-4.4-beta5-windows.zip)をダウンロード
 1. 解凍して、premake4.exe を適当なフォルダに配置してパスを通しておく。
 1. [ここ](http://d.hatena.ne.jp/ousttrue/20090323/1237798167)とか参考にしながら、しこしこ premake4.lua を書く。<BR>
 ※premake4.lua でググるといっぱい出てくる。
 1. コマンドラインで、premake4.luaを配置してるフォルダに移動し

```
 >premake4 vs2008
```

とか実行してみる。

ほら出来た＼(^o^)／

# おまけ - premakeのソースコードを手に入れて魔改造するための準備 -
 * ビルド手順は、[このへん](http://industriousone.com/building-premake) に詳しく書いてある。

## 手順 
 1. リポジトリ https://bitbucket.org/premake/premake-dev をとりあえずフォーク。(単にローカルにクローンするだけでもOK)
 ※Mercurialなので、[TortoiseHG](http://tortoisehg.bitbucket.org/ja/)か[SourceTree](http://tortoisehg.bitbucket.org/ja/)を使えばいいんじゃないかな？

 1. 解凍後、premake4.exe をパスの通るとこに置いとく。
  ※premakeのプロジェクトを生成するためのpremakeを使うことによって、最新のpremakeをビルドすることができるようになるわけです。
 
 1. script.c を生成するためにコマンドラインで、

```
> premake4 emded 
```
を実行。
1. プロジェクトを生成

```
> premake4 vs2008
```

して、生成された sln を開いてビルドすると、\bin\release　の下に、実行ファイルができてる。
※今の最新だと、premake5.exe が生成される。

はい実行ファイルが出来上がり＼(^o^)／
コレであんなことやこんなことができる・・・( ´∀｀)

まだ手をつけはじめたばかりなので、細かい説明はまだの機会に。。。

# 参考ページ
 * [公式](http://industriousone.com/what-premake)
 * [Premake の適当な使い方](http://masayashi.hatenablog.jp/entry/2013/12/30/233525)
 * [[ODE]ODE を Visual Studio 2010 で使う](http://tm86eublog.blog42.fc2.com/blog-entry-253.html)<BR>
  ※ODE(OSSな物理エンジン)は、premake使ってるっぽい