저는 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
파일이 생성되지 않습니다.
C 또는 C++ 응용 프로그램에 내장 된 루아를 실행하려고합니까? – ZeroPhase
아니요. 배포 용 독립 실행 형 exe 파일이 필요합니다. – rnso
나는 어쨌든 내가 가지고있는 것을 던질 것이다. 그것은 당신을 위해 일할 수도 있습니다. – ZeroPhase