🌕

C++プロジェクトにluaを組み込む

2024/04/04に公開

環境

windows11 home
premake5
visual studio2022
7zip

luaの環境構築

luaのダウンロードと解凍

lua download areaから
lua-〇.〇.〇.tar.gz をダウンロードする。

ダウンロードしたlua-〇.〇.〇.tar.gz7zip2回使用して解凍する。
lua-〇.〇.〇というフォルダができれば成功。

luaのビルド

premake5を使用してプロジェクトの作成を行う
lua-〇.〇.〇premake5.luaを配置する。

premake5.luaの内容は以下のようにする。

lua-〇.〇.〇/premake5.lua
workspace "Lua"
   configurations { "Debug", "Release" }
   platforms { "x64" }
   location "build"

project "LuaLib"
   kind "StaticLib"
   language "C"
   architecture "x64"
   targetdir "bin/%{cfg.buildcfg}"

   files { "src/*.c" }
   excludes { "src/lua.c", "src/luac.c" }

   filter "configurations:Debug"
      defines { "DEBUG" }
      symbols "On"

   filter "configurations:Release"
      defines { "NDEBUG" }
      optimize "On"

premake5.luaが完成したら
コマンドプロンプトを開き、

  1. premake5.luaのある階層まで遷移する。

    $ cd premake5.luaのある階層
    
  2. premake5を実行する

    今回はvs2022を使用するので2022としているが、
    2019の場合は、vs2019と指定すると2019に合わせた出力が行われる

    $ premake5 vs2022
    

premake5が正常に動作すると
lua-〇.〇.〇buildというフォルダが作成され、
中に.sln.vcxproj等のファイルが作成される

.slnをダブルクリックをしてVisual Studioを開く。
VisualStudioを開いたら
上にあるメニューバーからビルド -> ソリューションのビルドを選択してビルドを行う。
これをDebug,Releaseの2つのパターン行う

ビルドが出来たら
lua-〇.〇.〇フォルダの中にbinというフォルダが作成される。
binの中にはDebug,Relaseがありその中に.lib等のファイルが存在していると
luaのビルドが完成した形になる。

C++プロジェクトに組み込む

プロジェクトの作成

適当なフォルダを作成して、中に
premake5.luaを作成する

premake5.luaの内容は以下
変数pathの文字列は自身の環境に合わせて変更してください。

premake5.lua
workspace "LuaTutorial"
   configurations { "Debug", "Release" }
   platforms { "x64" }
   location "build"

project "hello-lua"
   kind "ConsoleApp"
   language "C++"
   architecture "x64"
   targetdir "bin/%{cfg.buildcfg}"

   -- Luaソースコードのパス。
   local path = "C:/Program Files/lua-〇.〇.〇"

   files { "src/**.h", "src/**.cpp" }
   
   -- Luaのインクルードディレクトリ
   includedirs { path .. "/src" }

   -- ライブラリとしてリンクするLuaの名前
   links { "lua" }

   filter "configurations:Debug"
      defines { "DEBUG" }
      symbols "On"

      -- デバッグビルド時に使用するライブラリディレクトリ
      libdirs { path .. "/bin/Debug" }

   filter "configurations:Release"
      defines { "NDEBUG" }
      optimize "On"

      -- リリースビルド時に使用するライブラリディレクトリ
      libdirs { path .. "/bin/Release" }

premake5.luaが作成出来たら以下のコマンドを先ほど作成したpremake5.luaの配置してある階層で実行する

$ premake5 vs2022

ソースコード作成

  1. premake5.luaと同じ階層にsrcというフォルダを作成する。

  2. build/LuaTutorial.slnを開く

  3. エディター上のソリューションエクスプローラーを右クリックする
    追加 -> 新しい項目 -> CPPファイルを選択して
    ファイル名をmain
    場所を1で作成したsrcにして追加をクリックする。

4 追加したcppに以下のソースコードをペーストする

main.cpp
#include <lua.hpp>

int main() {
    lua_State* L = luaL_newstate();
    luaL_openlibs(L);

    luaL_dostring(L, "print('Hello, World!')");

    lua_close(L);
    return 0;
}
  1. F5の実行で、*Hello, World!*とコンソールに出力されると
    C++にluaの組み込み成功

参考

LuaをVC2015のプログラムに組み込む
ビルドツールpremakeの紹介
premake docs

Discussion