2017-10-25 1 views
1

이 페이지 https://github.com/LuaDist/Repository/wiki/Example:-Lua-module에 따르면 Luadist를 사용하여 루아 소스 파일로부터 실행 파일을 생성 할 수 있습니다. 그러나, 나는 이것을 어떻게하는지 명확하지 않다. iuplua.exe와 잘 작동하는 IUP GUI 코드가있는 루아 소스 파일 (abcd.lua)이 있습니다. 이 파일을 실행 파일로 변환하려면 어떻게해야합니까? 내가 CMakeLists.txt로 위 파일 이름을 지정하고 다음이와 ABCD가 들어있는 폴더에 cmake 명령을 실행해야합니다 생각Luadist를 사용하여 실행 파일에 루아 소스

project (abelhas NONE) 
cmake_minimum_required (VERSION 2.8) 

include (cmake/dist.cmake) 
include (lua) 

install_lua_executable (abcd abcd.lua) 

: 내가 다음과 같이 파일을 생성 할 필요가 언급 한 페이지 위에서 보인다. 루아 파일. 이 올바른지? 이것을 위해 cmake-gui (cmake-qt-gui)를 사용할 수 있습니까? cmake는 Luadist의 일부입니까, 아니면 별도로 설치해야합니까? 나는 cmake.lua 파일이 하나 있지만 Luadist 폴더에 dist.cmake 파일을 찾을 수 없습니다. 나는 결코 전에 cmake를 사용하지 않았기 때문에 나는이 과정에 대한 설명을 감사 할 것이다.

+0

C 또는 C++ 응용 프로그램에 내장 된 루아를 실행하려고합니까? – ZeroPhase

+0

아니요. 배포 용 독립 실행 형 exe 파일이 필요합니다. – rnso

+0

나는 어쨌든 내가 가지고있는 것을 던질 것이다. 그것은 당신을 위해 일할 수도 있습니다. – ZeroPhase

답변

1

저는 C++C 프로젝트에 내 루아 스크립트를 임베드하기 위해 xxd.lua을 사용했습니다. xxd.lua은 주어진 파일의 16 진수 덤프를 부호없는 char 배열로 유지하는 C 파일을 생성합니다. 거기에서 C 파일은 나머지 프로그램과 함께 컴파일됩니다.

EmbLuaFiles.cmake : CMakeLists.txt에서

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() 

:

#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); 
} 

당신이 바이러스 보호를 실행하는 경우 c/c++ 다음에

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}) 

가 액세스 할 수 있습니다 실행중인 디렉토리를 확인해야합니다. xxd.lua from b 면제 또는 c 파일이 생성되지 않습니다.

+0

상세하고 잘 설명 된 답변을 보내 주셔서 감사합니다. 그것은 나를 이해하는 데 시간이 걸릴 것입니다. – rnso