以前作手游项目时,客户端用lua作脚本,基本全部游戏逻辑都用它完成,玩起来有点不爽,感受“过重”了。而我又比较偏服务端这边(仅有C++),因此热情不高。最近,加入了一个端游项目,客户端和服务器都用了lua,各类玩法是让我眼界大开。在此,写下本身的心得与体会,但愿能与你们共同探讨进步。html
lua官网下载lua源代码,咱们将用它来编译静态库,解释器,以及动态库。c++
CMake官网下载最新的安装包,咱们将用它来做为搭建solution的工具。git
集成开发环境为VS2012,整个的编码以及测试工做,将借助它来完成。github
将下载好的lua源码解压好后,获得如图所示目录,咱们在src目录下,建立一个名为CMakeLists.txt的文本文件。api
根据doc目录下的readme的说明,咱们编写以下内容,来创建静态库:服务器
能够看到,创建library须要框出的全部.c文件,创建interpreter须要library文件加上lua.c,至于最后的compiler,我略去不表。app
整个的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目录,整个结构看起来以下:测试
点击configure,再点击finish便可,咱们无需改动编译器选项。ui
配置好后,点击旁边的Generate。一切ok后,咱们便构造好了咱们的solution。
打开LuaTest.sln后,咱们有5个项目,其生成的ALL_BUILD和ZERO_CHECK这两个项目咱们没必要关心。LuaInterpreter是lua解释器的项目,LuaLib是lua静态库项目,LuaWithCPPTest是C++与lua交互的项目。
将LuaInterpreter设为启动项运行,得以下结果:
将LuaWithCPPTest设为启动项运行(注意,在这以前必须运行LuaLib生成静态库,这个项目依赖LuaLib的静态库,其依赖关系由CMakeLists.txt里写明生成,具体可观察LuaWithCPPTest的项目属性),咱们获得以下输出:
至此,整个环境搭建成功。 Enjoy it!
CMake是个很是好用的生成解决方案的工具,经过它,咱们能够以最少的改动来生成咱们想要的解决方案。工欲善其事,必先利器。有了CMake这个利器,配合github,咱们能够仅用几个文本文件在任何联网的机器上组织好咱们的代码!
忘了注明本身写的source.cpp文件了,请下载解压到lua的src文件夹下。