引言

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

环境搭建

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

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

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

创建solution

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

 

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

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

整个的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即可,我们无需改动编译器选项。

配置好后,点击旁边的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文件夹下。

C++与Lua交互(一)的更多相关文章

  1. C++与Lua交互(四)

    引言 通过前几篇,我们已经对Lua的C API有了一定的了解,如lua_push*.lua_is*.lua_to*等等.用C++调用Lua数据时,我们主要运用lua_getglobal与lua_pus ...

  2. C++与Lua交互之配置&交互原理&示例

    |Lua 简介 Lua 是一种轻量小巧的脚本语言,也是号称性能最高的脚本语言,它用C语言编写并以源代码形式开放. 某些程序常常需要修改内容,而修改的内容不仅仅是数据,更要修改很多函数的行为. 而修改函 ...

  3. C++与Lua交互(三)

    通过上一篇的热身,我们对C++调用lua变量有了一个认识,现在让我们再深入一点,去探索一下如何调用lua的函数.表. Lua与宿主通讯的关键--栈 lua是个动态脚本语言,它的数据类型如何映射到C++ ...

  4. C++与Lua交互(二)

    上一篇我们搭建好了整个的项目环境,现在,我们一起探索一下如何将lua寄宿到C++中. 宿主的实现 我们在LuaWithCPPTest项目下,查看Source.cpp代码如下: #include < ...

  5. 最优雅的C++跟lua交互.

    我先来吐槽一下我们这个项目. 我是做手机游戏的, cocos2dx引擎, lua编码. 这本来是一件很欢快的事情, 因为不用接触C++. C++写久了的人写lua, 就会感觉任督二脉被打通了, 代码写 ...

  6. C++与lua交互

    项目开发的脚本层用的是Lua,引擎用的是C++.但是经理不给开放引擎层的代码.刚好最近项目空闲,安排了学习C++跟Lua的通信. 一.C++与Lua数据交互 数据交互主要是通过C API来实现 首先, ...

  7. Linux下C/C++和lua交互-Table

    本来这些文章都是在我的个人网站www.zhangyi.studio,目前处在备案状态,暂时访问不了,所以搬到这边.  最近这两天需要弄清楚C++和lua间相互调用和数据传递,废话不多说,直接上过程. ...

  8. Cocos 2d-X Lua 游戏添加苹果内购(二) OC和Lua交互代码详解

    这是第二篇 Cocos 2d-X Lua 游戏添加苹果内购(一) 图文详解准备流程 这是前面的第一篇,详细的说明了怎样添加内购项目以及填写银行信息提交以及沙盒测试员的添加使用以及需要我们注意的东西,结 ...

  9. 教程二 网页和lua交互修改openwrt

    硬件 http://zhan.renren.com/h5/entry/3602888498044209332 GL-iNet 1 首先安装 webserver之lighttpd  ,openwrt自带 ...

随机推荐

  1. Python的包管理工具Pip

    接触了Ruby,发现它有个包管理工具RubyGem非常好用,而且有非常完备的文档系统http://rdoc.info 发现Python下也有相同的工具,包含easy_install和Pip.只是,我没 ...

  2. iOS viewDidUnload方法

    转自:http://blog.csdn.net/chun799/article/details/8951694 在iOS6中,viewDidUnload回调方法被Deprecated掉了.查看苹果的文 ...

  3. 1043. Is It a Binary Search Tree (25)

    the problem is from pat,which website is http://pat.zju.edu.cn/contests/pat-a-practise/1043 and the ...

  4. QQWry.dat 数据写入

    纯真IP库 数据多,更新及时,很多同学在用,网上关于其读取的帖子也有不少(当然其中有一些是有BUG的),但却很少有关于其写入的帖子.OK,下面分享下写QQWry.dat. QQWry.dat 分三个部 ...

  5. SQL Server 之 在数据库之间进行数据导入导出

    1.同一服务器上数据库之间进行数据导入导出 (1).使用 SELECT INTO 导出数据 在SQL Server中使用最广泛的就是通过SELECT INTO语句导出数据,SELECT INTO语句同 ...

  6. Android 高级UI设计笔记04:使用setDrawingCacheEnabled(boolean flag)提高绘图速度

    1. View组件显示的内容可以通过cache机制保存为bitmap, 使用到的API有: void setDrawingCacheEnabled(boolean flag) Bitmap getDr ...

  7. PHP读书笔记(4)-运算符

    什么是运算符 什么是运算符?运算符是告诉PHP做相关运算的标识符号.例如,你需要计算123乘以456等于多少,这时候就需要一个符号,告诉服务器,你需要做乘法运算. PHP中的运算符有哪些?PHP运算符 ...

  8. PHP读书笔记(3)-常量

    什么是常量 什么是常量?常量可以理解为值不变的量 :或者是常量值被定义后,在脚本的其他任何地方都不可以被改变.手册上是这么定义PHP的常量:常量是一个简单值的标识符(名字).如同其名称所暗示的,在脚本 ...

  9. hadoop学习记录(四)hadoop2.6 hive配置

    一.安装mysql 1安装服务器 sudo apt-get install mysql-server 2安装mysql客户端 sudo apt-get install mysql-client sud ...

  10. java 网络编程 模拟browser

    --java模拟实现browser,主要代码: package socket; import java.io.*; import java.net.*; public class MyHttpClie ...