新トップページへ | Tip

VisualStudio2012でのC++とluaで開発する際の開発環境構築(自分用)

Update : 13/01/04

Windows上での、ゲーム開発をする際の、luaの開発環境構築の手順を書きます。私個人用のものですw
VisualStudio2012上での手順です。
このページは「Microsoft Visual Studio Express 2012 for Windows Desktop」を使うこと前提です。


もくじ

必要なものをDLする
luaのビルド
VisualStudio2012にてプロジェクトを作成し、環境設定する


必要なものをDLする

ダウンロードするもの ダウンロードするページ(URL) 備考
lua本体 http://www.lua.org/download.html 最新は「5.2.1」だった


luaのビルド

5.1の時代は、VisualStudioでビルドする用のバッチが付属していたが、5.2.1をDLして使ってみたら、makefileとソースだけとなっていた。
自力でstaticライブラリを作ることとする。手順は非常に簡単です。

以下の手順を行う。
1.VisualStudioでプロジェクトの新規作成
2.luaのソースをプロジェクトに追加
3.プロジェクトの設定をスタティックライブラリを作成する設定に変更
4.ビルドして、スタティックリンクライブラリを作成する

1.VisualStudioでプロジェクトの新規作成

VisualStudioで空のプロジェクトを作成する(「全般」の中の「空のプロジェクト」を選ぶこと。プロジェクト名は適当につける)。

2.luaのソースをプロジェクトに追加

luaのsrcディレクトリにはヘッダファイルとCファイル、そして、makefileだけしかない。
ここで使用するのは、ヘッダファイルとCファイルのみ。
ヘッダファイルとCファイルをプロジェクトに追加を行う。
ヘッダファイルをプロジェクトの「ヘッダー ファイル」へドラッグ&ドロップする(ヘッダをドラッグ&ドロップしてみた直後の画像
Cファイルをプロジェクトの「ソース ファイル」へドラッグ&ドロップする(Cファイルをドラッグ&ドロップした直後

3.プロジェクトの設定をスタティックライブラリを作成する設定に変更

プロジェクトの設定を以下のように変更します。
キャプチャでは、Debugの構成ですが、Releaseの設定も同じく変更します。

4.ビルドして、スタティックリンクライブラリを作成する

上記設定が終わったら、普通にビルドをします。
すると、slnファイルがあるディレクトリと同じディレクトリにReleaseディレクトリが生成され、その中にlibファイルが生成されているはずです。これがluaのスタティックリンクライブラリとなります。


VisualStudio2012にてプロジェクトを作成し、環境設定する

新規作成したVisualStudioのプロジェクトに対し、以下の作業を実施します。

1.luaのヘッダファイルへパスを通す
2.libファイルをリンクする設定を追加
3.サンプルプログラムを作る


1.luaのヘッダファイルへパスを通す

luaのソースの中に含まれているヘッダファイル(*.h)を、どこか適当な場所にディレクトリを作成し、そのディレクトリへコピーします。
そして、VisualStudioのプロジェクトに、そのディレクトリにヘッダふぁいるがある旨の情報を追加します。


2.libファイルをリンクする設定を追加

4.ビルドして、スタティックリンクライブラリを作成するで作成したlibファイルをVisualStudioのプロジェクトファイルに追加します。


3.サンプルプログラムを作る

稼働確認なので、どのようなソースでもいいのですが・・・。以下のようなソースを書いてみた(コンソールアプリ)。
何か入力してEnterキーを押すと、それをLuaスクリプトとして実行します。

main.cpp
#include <iostream>

#include "lua.hpp"

int main(int argc, char** argv) {

    char buff[256];
    int error;

    lua_State *L = luaL_newstate();
    luaL_openlibs(L);

    while(fgets(buff, sizeof(buff), stdin) != NULL) {
            error = luaL_loadbuffer(L, buff, strlen(buff), "line") || lua_pcall(L, 0, 0, 0);

            if (error) {
                    fprintf(stderr, "%s", lua_tostring(L, -1));
                    lua_pop(L, 1);
            }
    }

    lua_close(L);
    return 0;
}