Visual Studioで開発しているアプリにLuaを組み込みたかったのだが、LuaBinariesのDLLはMinGWでビルドした代物で案の定使えなかったので、自前でビルドすることを決意した。
という訳でLuaのライブラリ部分(静的ライブラリとDLL)のみをNMAKE + Visual C++でビルドするMakefileを、テンプレートとして使いまわすことを前提に書いてみた。
https://github.com/eel3/lua_nmake_template
現時点ではLua 5.2.3用になっている。一応、必要なオブジェクトファイルや依存関係の一覧をLuaのソースコードに付属するMakefileからコピーしなおすことで、別のバージョンのLuaのビルドにも対応できるはず。
この使い回しをしたいがために、Visual StudioのプロジェクトではなくNMAKEで作成した訳だ。コピー元となるMakefileの構造が大きく変わらない限り、Luaがバージョンアップした時にその辺をコピペし直すだけで対応できるはずだ。
MinGW(というかgccなのか?)とVisual C++付属のコンパイラでは、オブジェクトファイルの拡張子が異なる(MinGWやgccは .o、Microsoft C/C++ Compilerは .obj)。なので本来ならオリジナルのMakefileの依存関係一覧などをそのまま使いまわすことはできないのだが、ちょっとした工夫でMinGWと同じ拡張子でオブジェクトファイルを生成するようにしてある。だから依存関係一覧とかをコピペしただけで使えるのだ。
ちなみに、lua.exeとluac.exeは配布されている実行ファイルで十分だろうから、このMakefileではビルドしない。まあ、自分でビルドする云々の話はLuaのライブラリを組み込んでC APIを叩く人ぐらいにしか関係してこない話だから、これで十分だろう。