打包要从 C 调用的 Lua 脚本文件的最佳做法是什么。使用 CMake

What is the best practice for packaging Lua script files to be called from C. Using CMake

我正在学习使用 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 文件 post 构建的最佳实践是什么?

也许我的做法完全错了。也许这根本不是构建问题。 lua 脚本需要 运行 相对于可执行文件(或者更好的是,相对于库)而不是我的工作目录。

有什么想法吗?

在我们的软件中,我们定义了一个目录路径,我们在其中存储用 Lua 编写的扩展。然后我们使用 opendir()、readir() 等在该目录中查找文件,当它们以 '.lua' 结尾时,我们加载并执行它们。所以使用只需要将他们的脚本复制到那个位置。

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