Lua source to executable using Luadist
根据此页面https://github.com/LuaDist/Repository/wiki/Example:-Lua-module,可以使用Luadist从Lua源文件创建可执行文件。但是,我不清楚如何执行此操作。我有一个带有IUP GUI代码的Lua源文件(名为abcd.lua),可以与iuplua.exe一起很好地运行。如何将其转换为可执行文件?从上面提到的页面看来,我需要创建一个文件,如下所示:
1 2 3 4 5 6 7 | project ( abelhas NONE ) cmake_minimum_required ( VERSION 2.8 ) include ( cmake/dist.cmake ) include ( lua ) install_lua_executable ( abcd abcd.lua ) |
我相信我必须将上面的文件命名为CMakeLists.txt,然后在包含该文件和abcd.lua文件的文件夹中运行cmake命令。这样对吗?我可以为此使用cmake-gui(cmake-qt-gui)吗? cmake是Luadist的一部分,还是必须单独安装?尽管存在一个cmake.lua文件,但在Luadist文件夹中找不到任何dist.cmake文件。由于我以前从未使用过cmake,因此请您对此程序进行任何解释,我将不胜感激。
我一直使用
EmbLuaFiles.cmake:
1 2 3 4 5 6 7 8 9 10 11 12 13 | file(DOWNLOAD https://github.com/gittup/tup/blob/master/src/luabuiltin/xxd.lua "${CMAKE_SOURCE_DIR}/Path/To/Store/File/At" SHOW_PROGRESS EXPECTED_HASH hash_value) macro(EmbedLuaFiles lua depends) add_custom_command(OUTPUT LuaScriptBinding.c COMMAND"${CMAKE_COMMAND}" -E copy "${CMAKE_SOURCE_DIR}/DevelopmentTools/xxd.lua""${CMAKE_BINARY_DIR}" COMMAND ${lua} xxd.lua LuaScript.lua LuaScriptBinding.c DEPENDS ${depends} WORKING_DIRECTORY"${CMAKE_BINARY_DIR}") endmacro() |
在CMakeLists.txt中:
1 2 3 4 5 6 7 8 9 10 11 12 13 | include(EmbedLuaFiles) add_custom_command(OUTPUT lua.exe COMMAND"${CMAKE_COMMAND}" --build"${CMAKE_BINARY_DIR}/lua-build" COMMAND"${CMAKE_COMMAND}" -E copy"${CMAKE_BINARY_DIR}/lua-build/lua.exe" "${CMAKE_BINARY_DIR}" WORKING_DIRECTORY"${CMAKE_BINARY_DIR}/lua-src" ) set(LUA_C_FILES LuaScriptBinding.c) EmbedLuaFiles(lua.exe"${CMAKE_BINARY_DIR}/lua.exe") set(LUA_EXE lua.exe ${LUA_C_FILES}) add_executable(TargetProject ${SOURCE_FILES} ${LUA_EXE}) |
在
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | #if DEBUG #define LUA_SCRIPT"LuaScript.lua" #define LUA_SCRIPT_LEN 0 #else extern"C" { extern unsigned char LuaScript_lua[]; extern unsigned int LUA_SCRIPT_LEN; }; #define LUA_SCRIPT (char*)LuaScript_lua #define LUA_SCRIPT_LEN LUA_SCRIPT_LEN #endif void loadFile(lua_state *luaState, const char *luaFile, size_t len) { #if !DEBUG if(luaL_loadbuffer(luaState, luaFile, len, luaFile)) #else if(luaL_loadfile(luaState, luaFile) != 0) #endif cerr <<"Failed to load lua file" << endl; } int main() { luaState = LuaL_newstate(); luaL_openlibs(luaState); loadFile(luaState, LUA_SCRIPT, LUA_SCRIPT_LEN); lua_call(luaState, 0, 0); // run the script lua_close(luaState); } |
如果您正在运行病毒防护,则需要确保将正在运行