Вы можете объединить несколько файлов в один файл, используя luac . При запуске все чанки из исходных файлов выполняются в порядке их добавления в скомпилированный файл:
$ echo "x=1" > l1.lua
$ echo "y=2" > l2.lua
$ echo "print(x, y)" > l3.lua
$ luac -o run.luac l1.lua l2.lua l3.lua
$ lua run.luac
1 2
Вы можете загрузить этот файл в Lua из C, используя luaL_loadfile
, который помещает функцию на вершину стека, если он успешно загружен. Затем вы можете просто запустить эту функцию, используя lua_call
для запуска всех объединенных скомпилированных файлов.
Обратите внимание, что вы можете встроить содержимое скомпилированного файла в виде строки в ваш проект, нет необходимости сохранять его во внешнем файле.
Обновление для LuaJIT 2
Как вы обнаружили, вы можете использовать Lua Compiler в Lua , чтобы получить комбинированный файл, который можно загрузить, как было отмечено ранее. Это упрощенная версия, которая выводит на стандартный вывод:
-- http://lua-users.org/wiki/LuaCompilerInLua
-- compile the input file(s) passed as arguments and output them combined to stdout
local chunk = {}
for _, file in ipairs(arg) do
chunk[#chunk + 1] = assert(loadfile(file))
end
if #chunk == 1 then
chunk = chunk[1]
else
-- combine multiple input files into a single chunk
for i, func in ipairs(chunk) do
chunk[i] = ("loadstring%q(...);"):format(string.dump(func))
end
chunk = assert(loadstring(table.concat(chunk)))
end
io.write(string.dump(chunk))
Для предыдущего примера вы можете использовать его следующим образом:
$ luajit combine.lua l1.lua l2.lua l3.lua > out.ljc
$ luajit out.ljc
1 2