以前作手遊項目時,客戶端用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文件夾下。