2016-12-29 4 views
1

저는 루아를 사용하여 C 프로그램에 임베딩하는 방법을 배우고 있습니다. 나는 C 프로그램이 빌드 된 후 Lua 파일을 찾을 수있는 최선의 방법을 궁금해했다. 내가 밖으로 소스 CMake 빌드와 함께 작동하도록 노력하고있어.루아 스크립트 파일을 C에서 호출하여 패키징하는 가장 좋은 방법은 무엇입니까? CMake를 사용하여

여기까지 제가 지금까지 있습니다. 내 CMakeLists.txt에서 내 C 파일에서

, 나는이 ...

int runLuaHelloWorld() { 

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

    return 0; 
} 

나는 있습니다.

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

이렇게하면 성공적으로 내 빌드 디렉토리에 복사됩니다. 하지만 그것은 내 현재 작업 디렉토리에 상대적으로 내 루아 스크립트 파일을로드하는 것 같습니다. 즉, 내 빌드 폴더에서 스크립트를 실행하는 경우에만 스크립트를 실행할 수 있습니다.

외부 루아 파일 빌드를 포함하고 실행하는 가장 좋은 방법은 무엇입니까?

아마도 나는 완전히 잘못된 방향으로 가고 있습니다. 어쩌면 이것은 빌드 문제가 아닐 수도 있습니다. 루아 스크립트는 작업 디렉토리보다는 실행 파일에 상대적으로 (또는 라이브러리에 비해 상대적으로) 실행해야합니다.

아이디어가 있으십니까?

+0

아마 이것은 [https://stackoverflow.com/questions/16865040/luajit-compiling-bytecode-into-object-format] 모범 사례 –

+0

도 참조하십시오 http://stackoverflow.com/questions/ 194520/creating-standalone-lua-executables를 참조하십시오. – lhf

+0

독립형 Lua 실행 파일을 만들지 않으려 고합니다. 나는 C로 라이브러리를 작성 중이며이 라이브러리와 상호 작용하기 위해 Lua 스크립트를 사용하는 애플리케이션을 포함하고자한다. lua 파일을 편집하여 스크립트를 변경할 때마다 전체 라이브러리를 다시 컴파일 할 필요가 없도록하고 싶습니다. – loneraver

답변

2

우리의 소프트웨어에서는 루아로 작성된 확장을 저장하는 디렉토리에 대한 경로를 정의합니다. 그런 다음 opendir(), readir() 등을 사용하여 해당 디렉토리의 파일을 찾은 다음 '.lua'로 끝나면로드하고 실행합니다. 따라서 스크립트를 해당 위치에 복사하면됩니다.

일부 응용 프로그램에서는 Lua 스크립트를 (PostgreSQL) 데이터베이스 테이블의 텍스트 열에 저장하기도합니다.

+0

좋은 아이디어! 이것은 훌륭하게 작동합니다. 유일한 문제는 내 Lua 스크립트가 같은 폴더에 다른 Lua 모듈을 찾지 못한다는 것입니다. 나는 직장에서 주로 파이썬을 쓰고 루아를 처음 사용하기 때문에 나랑 벗겨주세요. 필자는 다른 Lua 파일을 지원하는 곳을 찾기 위해 경로 변수를 설정해야한다고 읽었습니다. 이게 맞습니까? 아니면 더 좋은 방법이 있습니까? – loneraver

+1

네, 맞습니다. 루아가 모듈을 찾을 경로를 매우 유연하게 설정할 수 있습니다. 사실, 좀 더 깊게 파고 들면 모듈 로더를 작성하는 데 더 많은 옵션을 사용할 수 있습니다. 자세한 내용은 lua_load 주변의 문서를 확인하십시오. –

+0

그것은 대단하다! 답장을 게시 한 후,이 작업을 수행하는 방법을 알아 냈습니다. 내가 올바른 길을 가고 있는지 확인해 주셔서 감사합니다. – loneraver