C++與Lua交互(一)


引言

之前做手游項目時,客戶端用lua做腳本,基本所有游戲邏輯都用它完成,玩起來有點不爽,感覺“太重”了。而我又比較偏服務端這邊(僅有C++),所以熱情不高。最近,加入了一個端游項目,客戶端和服務器都用了lua,各種玩法是讓我眼界大開。在此,寫下自己的心得與體會,希望能與大家共同探討進步。

環境搭建

lua官網下載lua源代碼,我們將用它來編譯靜態庫,解釋器,以及動態庫。

image

CMake官網下載最新的安裝包,我們將用它來作為搭建solution的工具。

image

集成開發環境為VS2012,整個的編碼以及測試工作,將借助它來完成。

創建solution

將下載好的lua源碼解壓好后,得到如圖所示目錄,我們在src目錄下,創建一個名為CMakeLists.txt的文本文件。

image

 

image

根據doc目錄下的readme的說明,我們編寫如下內容,來建立靜態庫:

image

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

image

整個的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目錄,整個結構看起來如下:

image

點擊configure,再點擊finish即可,我們無需改動編譯器選項。

image

配置好后,點擊旁邊的Generate。一切ok后,我們便構造好了我們的solution。

image

打開LuaTest.sln后,我們有5個項目,其生成的ALL_BUILD和ZERO_CHECK這兩個項目我們不必關心。LuaInterpreter是lua解釋器的項目,LuaLib是lua靜態庫項目,LuaWithCPPTest是C++與lua交互的項目。

將LuaInterpreter設為啟動項運行,得如下結果:

image

將LuaWithCPPTest設為啟動項運行(注意,在這之前必須運行LuaLib生成靜態庫,這個項目依賴LuaLib的靜態庫,其依賴關系由CMakeLists.txt里寫明生成,具體可觀察LuaWithCPPTest的項目屬性),我們得到如下輸出:

image

至此,整個環境搭建成功。 Enjoy it!

總結

CMake是個非常好用的生成解決方案的工具,通過它,我們可以以最少的改動來生成我們想要的解決方案。工欲善其事,必先利器。有了CMake這個利器,配合github,我們可以僅用幾個文本文件在任何聯網的機器上組織好我們的代碼!

忘了注明自己寫的source.cpp文件了,請下載解壓到lua的src文件夾下。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM