2016-12-29 12 views
1

我正在學習使用Lua嵌入到我的C程序中。我想知道他們最好的辦法是確保我的C程序可以在構建完成後找到Lua文件。我試圖確保這可以與源代碼CMake構建一起使用。包裝Lua腳本文件的最佳做法是從C中調用。使用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腳本文件相對於我當前的工作目錄。換句話說,如果我從build文件夾運行腳本,我只能運行該腳本。

包含和運行外部lua文件發佈後的最佳做法是什麼?

也許我會以完全錯誤的方式去解決這個問題。也許這根本不是構建問題。 lua腳本需要相對於可執行文件運行(或者更好,相對於庫),而不是運行在我的工作目錄中。

有什麼想法?

+0

大概[這是](https://stackoverflow.com/questions/16865040/luajit-compiling-bytecode-into-object-format)有史以來的最佳做法 –

+0

參見http://stackoverflow.com/questions/ 194520 /創建 - 獨立 - 盧阿 - 可執行文件。 – lhf

+0

不打算創建獨立的Lua可執行文件。我正在用C編寫一個庫,並希望包含一個使用Lua腳本與該庫進行交互的應用程序。我想讓編輯lua文件變得很容易,以便每次更改腳本時都不必重新編譯整個庫。 – loneraver

回答

2

在我們的軟件中,我們定義了一個路徑到一個目錄,在這裏我們存儲了用Lua編寫的擴展。然後我們使用opendir(),readir()等來查找那個目錄中的文件,當它們以'.lua'結尾時,我們加載並執行它們。所以只需要將他們的腳本複製到該位置。

在一些應用程序中,我們甚至將Lua腳本存儲在(PostgreSQL)數據庫表的文本列中。

+0

好主意!這很奇妙。我唯一的問題是,我的Lua腳本沒有在同一個文件夾中找到任何其他Lua模塊。我主要在工作中編寫Python,而我是Lua的新手,所以請和我一起袒護。我想我讀過,我必須設置一個路徑變量,讓它知道在哪裏尋找其他支持的Lua文件。這是正確的還是有更好的方法? – loneraver

+1

是的,這是正確的。您可以非常靈活地設置Lua將尋找模塊的路徑。實際上,如果你深入挖掘,你甚至有更多的選擇來編寫自己的模塊加載器。有關詳細信息,請查看lua_load周圍的文檔。 –

+0

太棒了!發佈我的回覆後,我想出瞭如何做到這一點。感謝您確認我在正確的軌道上。 – loneraver