C++与Lua交互(一)

时间:2022-12-23 20:59:04

引言

之前做手游项目时,客户端用lua做脚本,基本所有游戏逻辑都用它完成,玩起来有点不爽,感觉“太重”了。而我又比较偏服务端这边(仅有C++),所以热情不高。最近,加入了一个端游项目,客户端和服务器都用了lua,各种玩法是让我眼界大开。在此,写下自己的心得与体会,希望能与大家共同探讨进步。

环境搭建

lua官网下载lua源代码,我们将用它来编译静态库,解释器,以及动态库。

C++与Lua交互(一)

CMake官网下载最新的安装包,我们将用它来作为搭建solution的工具。

C++与Lua交互(一)

集成开发环境为VS2012,整个的编码以及测试工作,将借助它来完成。

创建solution

将下载好的lua源码解压好后,得到如图所示目录,我们在src目录下,创建一个名为CMakeLists.txt的文本文件。

C++与Lua交互(一)

 

C++与Lua交互(一)

根据doc目录下的readme的说明,我们编写如下内容,来建立静态库:

C++与Lua交互(一)

可以看到,建立library需要框出的所有.c文件,建立interpreter需要library文件加上lua.c,至于最后的compiler,我略去不表。

C++与Lua交互(一)

整个的CMakeLists.txt文件内容如下:

project(LuaTest)

 

include_directories(AFTER ${CMAKE_SOURCE_DIR})

 

##########lua静态库############################################

set(LIB_FILES lapi.c lcode.c lctype.c ldebug.c ldo.c ldump.c lfunc.c lgc.c llex.c lmem.c lobject.c lopcodes.c lparser.c lstate.c lstring.c ltable.c ltm.c lundump.c lvm.c lzio.c lauxlib.c lbaselib.c lbitlib.c lcorolib.c ldblib.c liolib.c lmathlib.c loslib.c lstrlib.c ltablib.c loadlib.c linit.c)

 

source_group("\\libFiles" FILES ${LIB_FILES})

 

add_library (LuaLib STATIC ${LIB_FILES})

 

 

###########c++与lua交互###################

add_executable(LuaWithCPPTest source.cpp)

 

target_link_libraries(LuaWithCPPTest LuaLib)

 

 

############lua解释器###########

add_executable(LuaInterpreter lua.c ${LIB_FILES})

 

 

#ADD_DEFINITIONS(-LUA_LIB -LUA_BUILD_AS_DLL)

######################################define LUA_LIB##################################################

######################################define LUA_BUILD_AS_DLL#########################################

写好CMakeLists.txt后,我们打开安装好的CMake工具,我们需要选中source code目录和build the binaries目录,整个结构看起来如下:

C++与Lua交互(一)

点击configure,再点击finish即可,我们无需改动编译器选项。

C++与Lua交互(一)

配置好后,点击旁边的Generate。一切ok后,我们便构造好了我们的solution。

C++与Lua交互(一)

打开LuaTest.sln后,我们有5个项目,其生成的ALL_BUILD和ZERO_CHECK这两个项目我们不必关心。LuaInterpreter是lua解释器的项目,LuaLib是lua静态库项目,LuaWithCPPTest是C++与lua交互的项目。

将LuaInterpreter设为启动项运行,得如下结果:

C++与Lua交互(一)

将LuaWithCPPTest设为启动项运行(注意,在这之前必须运行LuaLib生成静态库,这个项目依赖LuaLib的静态库,其依赖关系由CMakeLists.txt里写明生成,具体可观察LuaWithCPPTest的项目属性),我们得到如下输出:

C++与Lua交互(一)

至此,整个环境搭建成功。 Enjoy it!

总结

CMake是个非常好用的生成解决方案的工具,通过它,我们可以以最少的改动来生成我们想要的解决方案。工欲善其事,必先利器。有了CMake这个利器,配合github,我们可以仅用几个文本文件在任何联网的机器上组织好我们的代码!

忘了注明自己写的source.cpp文件了,请下载解压到lua的src文件夹下。