2016-12-29 2 views
1

Ich lerne gerade, Lua zum Einbetten in meine C-Programme zu verwenden. Ich habe mich gefragt, was sie am besten sicherstellen, dass mein C-Programm die Lua-Dateien finden kann, nachdem es gebaut wurde. Ich versuche sicherzustellen, dass dies mit einem Out-of-Source CMake Build funktioniert.Was ist die beste Vorgehensweise beim Packen von Lua-Skriptdateien, die von C aus aufgerufen werden sollen. Verwenden von CMake

Hier ist was ich bisher habe.

In meiner C-Datei, ich habe ...

int runLuaHelloWorld() { 

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

    return 0; 
} 

In meinem CMakeLists.txt ich habe.

Dies kopiert es erfolgreich in mein Build-Verzeichnis. Aber es scheint meine lua-Skriptdatei relativ zu meinem aktuellen Arbeitsverzeichnis zu laden. Mit anderen Worten, ich kann das Skript nur ausführen, wenn ich es aus meinem Build-Ordner heraus ausführe.

Was ist die beste Vorgehensweise zum Einbinden und Ausführen externer Lua-Dateien nach dem Build?

Vielleicht mache ich das völlig falsch. Vielleicht ist das überhaupt kein Build-Problem. Das Lua-Skript muss relativ zur ausführbaren Datei (oder besser noch relativ zu einer Bibliothek) und nicht zu meinem Arbeitsverzeichnis ausgeführt werden.

Irgendeine Idee?

+0

Wahrscheinlich [das ist] (https://stackoverflow.com/questions/16865040/luajit-compiling-bytecode-into-object-format) die beste Praxis aller Zeiten –

+0

Siehe auch http://stackoverflow.com/questions/ 194520/creating-standalone-lua-executables. – lhf

+0

Sie suchen nicht nach eigenständigen Lua-Executables. Ich schreibe eine Bibliothek in C und möchte eine Anwendung einschließen, die Lua-Skripte verwendet, um mit dieser Bibliothek zu interagieren. Ich möchte es leicht machen, die LUA-Datei zu bearbeiten, so dass ich nicht jedes Mal, wenn ich das Skript ändere, die gesamte Bibliothek neu kompilieren muss. – loneraver

Antwort

2

In unserer Software definieren wir einen Pfad zu einem Verzeichnis, in dem wir in Lua geschriebene Erweiterungen speichern. Dann benutzen wir opendir(), readir() usw., um Dateien in diesem Verzeichnis zu finden, und wenn sie in .lua enden, laden und führen wir sie aus. Also benutze nur ihre Skripte an diesen Ort kopieren.

In einigen Anwendungen speichern wir die Lua-Skripte sogar in einer Textspalte einer (PostgreSQL-) Datenbanktabelle.

+0

Tolle Idee! Das funktioniert wunderbar. Das einzige Problem, das ich habe, ist, dass meine Lua-Skripte keine anderen Lua-Module in demselben Ordner finden. Ich schreibe hauptsächlich Python bei der Arbeit und ich bin neu bei Lua, also bitte nimm mich mit. Ich denke, ich lese, dass ich eine Pfadvariable setzen muss, um herauszufinden, wo ich nach anderen unterstützenden Lua-Dateien suchen soll. Ist das richtig oder gibt es einen besseren Weg? – loneraver

+1

Ja, das ist richtig. Sie können den Pfad, in dem Lua nach Modulen sucht, sehr flexibel einstellen. Eigentlich, wenn Sie ein wenig tiefer graben, haben Sie noch mehr Möglichkeiten, eigene Modullader zu schreiben. Überprüfen Sie die Dokumente rund um lua_load für Details. –

+0

Das ist großartig! Nachdem ich meine Antwort gepostet habe, habe ich herausgefunden, wie ich das tun kann. Danke für die Bestätigung, dass ich auf dem richtigen Weg war. – loneraver

Verwandte Themen