如何使用CMake打包Lua脚本文件以供C调用的最佳实践

我正在学习使用Lua嵌入我的C程序。我想知道怎么才能确保我的C程序在构建后能找到Lua文件。我正在试图确保这个问题在使用外部CMake构建时也能得到解决。

目前为止我有以下代码:

在我的C文件中,我有...

int runLuaHelloWorld() {

    lua_State *L = luaL_newstate();
    luaL_openlibs(L);
    luaL_dofile(L, "helloWorld.lua");
    lua_close(L);

    return 0;
}

在我的CMakeLists.txt文件中,我有...

set(EMBEDDED_LUA_SRC embeddedLua.c embeddedLua.h)
add_library(embeddedLua ${EMBEDDED_LUA_SRC})
if(LUA_FOUND)
    target_include_directories(embeddedLua PRIVATE ${LUA_INCLUDE_DIR})
    target_link_libraries(embeddedLua ${LUA_LIBRARIES})
    add_custom_command(TARGET embeddedLua POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:embeddedLua> helloWorld.lua)
endif()

这段代码成功地将Lua脚本文件复制到了我的构建目录中。但它似乎是相对于我的当前工作目录来加载我的Lua脚本文件的。换句话说,只有当我从我的构建目录运行时,我的脚本才能运行。

在构建后包含和运行外部Lua文件的最佳实践是什么呢?

也许我完全走了弯路。也许这完全不是一个构建问题。Lua脚本需要相对于可执行文件(或者更好地是相对于一个库)来运行,而不是相对于我的工作目录。

有什么想法吗?

点赞
用户2420301
用户2420301

在我们的软件中,我们定义了一个目录的路径,我们在其中存储用 Lua 编写的扩展文件。然后使用 opendir()、readir() 等函数在该目录中查找文件,并在其扩展名为“.lua”时加载和执行它们。因此,用户只需将其脚本复制到该位置即可。

在一些应用中,我们甚至将 Lua 脚本存储在 (PostgreSQL) 数据库表的文本列中。

2016-12-31 11:55:15