c++执行lua脚本

c++执行lua脚本

在一些项目中,我们使用c++调用lua脚本,让lua执行部分逻辑,例如一些游戏引擎,游戏的gamelogic用lua编写,引擎是c++编写,引擎让游戏逻辑跑起来就是c++调用lua脚本执行。

方法

下载下面两个第三方库,一个是lua,一个sol2.

https://github.com/ThePhD/sol2

https://github.com/lua/lua

构建我们的cmake工程,目录如下:

.
├── CMakeLists.txt
└── src
    ├── 3rdparty
    │   └── CMakeLists.txt
    ├── CMakeLists.txt
    └── main.cpp

将上面两个第三方库下载下来后放再3rdparty目录下面。

结果如下:

在这里插入图片描述

编写最外层的CMakeLists.txt

PROJECT(HELLO)  # 工程名字
ADD_SUBDIRECTORY(src bin)  # 将src加到工程中,编译到bin目录下

编写3rdparty下的CMakeLists.txt

里面的两个第三方库,sol2是一个cmake工程,但lua不是,我们先新建lua.cmake,里面内容:

set(lua_SOURCE_DIR_ ${CMAKE_CURRENT_SOURCE_DIR}/lua-5.4.4)

add_library(lua_static STATIC 
${lua_SOURCE_DIR_}/lauxlib.c
${lua_SOURCE_DIR_}/lbaselib.c
${lua_SOURCE_DIR_}/lcode.c
${lua_SOURCE_DIR_}/lcorolib.c
${lua_SOURCE_DIR_}/lctype.c
${lua_SOURCE_DIR_}/ldblib.c
${lua_SOURCE_DIR_}/ldebug.c
${lua_SOURCE_DIR_}/ldo.c
${lua_SOURCE_DIR_}/ldump.c
${lua_SOURCE_DIR_}/lfunc.c
${lua_SOURCE_DIR_}/lgc.c
${lua_SOURCE_DIR_}/linit.c
${lua_SOURCE_DIR_}/liolib.c
${lua_SOURCE_DIR_}/llex.c
${lua_SOURCE_DIR_}/lmathlib.c
${lua_SOURCE_DIR_}/lmem.c
${lua_SOURCE_DIR_}/loadlib.c
${lua_SOURCE_DIR_}/lobject.c
${lua_SOURCE_DIR_}/lopcodes.c
${lua_SOURCE_DIR_}/loslib.c
${lua_SOURCE_DIR_}/lparser.c
${lua_SOURCE_DIR_}/lstate.c
${lua_SOURCE_DIR_}/lstring.c
${lua_SOURCE_DIR_}/lstrlib.c
${lua_SOURCE_DIR_}/ltable.c
${lua_SOURCE_DIR_}/ltablib.c
#${lua_SOURCE_DIR_}/ltests.c
${lua_SOURCE_DIR_}/ltm.c
#${lua_SOURCE_DIR_}/lua.c
${lua_SOURCE_DIR_}/lundump.c
${lua_SOURCE_DIR_}/lutf8lib.c
${lua_SOURCE_DIR_}/lvm.c
${lua_SOURCE_DIR_}/lzio.c
#${lua_SOURCE_DIR_}/onelua.c
${lua_SOURCE_DIR_}/lapi.c
)
target_include_directories(lua_static PUBLIC ${lua_SOURCE_DIR_})

然后编写该目录下的CMakeLists.txt:

if(NOT TARGET sol2)

    add_subdirectory(sol2-3.3.0)

endif()


if(NOT TARGET lua)
    include(lua.cmake)
endif()

编写src下的CMakeLists.txt和main.cpp:

ADD_SUBDIRECTORY(3rdparty)
ADD_EXECUTABLE(hello main.cpp)

target_link_libraries(hello PUBLIC lua_static)
target_link_libraries(hello PUBLIC sol2)
#include<iostream>
#include "sol/sol.hpp"
int main(){
    sol::state m_lua_state;
    m_lua_state.open_libraries(sol::lib::base);
    std::string m_lua_script = "print (\"hello world\")";
    m_lua_state.script(m_lua_script);
    return 0;
}

按照cmake的方式编译我们的工程,运行结构如下

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值