Добавление к командам сборки в premake
Я использую premake makefile проект с настройками: {"VulkanDebug", "VulkanRelease", "OpenGLDebug", "OpenGLRelease"}
и хочу пройти DEBUG / RELEASE
а также VULKAN / OPENGL
токены к сценарию в buildCommands
,
Например, когда конфигурация VulkanRelease
команда build script.bat VULKAN RELEASE
и скрипт отвечает за решение, что делать с этими токенами.
Мое идеальное решение (с использованием неверной логики):
buildcommands { "script.bat" }
filter "configurations:*Vulkan*"
buildcommands.append(" VULKAN")
rebuildcommands.append(" VULKAN")
filter "configurations:*OpenGL*"
buildcommands.append(" OPENGL")
rebuildcommands.append(" OPENGL")
filter "configurations:*Debug*"
buildcommands.append(" DEBUG")
rebuildcommands.append(" DEBUG")
filter "configurations:*Release*"
buildcommands.append(" RELEASE")
rebuildcommands.append(" RELEASE")
Если я использую buildcommands
обычным способом Visual Studio будет рассматривать его как три отдельные команды для выполнения: script.bat
, VULKAN
, а также RELEASE
,
У меня есть несколько обходных путей, но все они мне безобразны. Сначала нужно передать полное имя конфигурации в качестве аргумента скрипту и проанализировать его там. На самом деле не фанат сгущать аргументы вместе, как это. Второй - создать аргументы командной строки для сценария premake для VULKAN
или же OPENGL
и только есть DEBUG
а также RELEASE
как конфигурации. Насколько я знаю, это сгенерирует отдельные файлы проекта для Vulkan и OpenGL, что кажется излишним. Наконец, я мог предоставить команду полной сборки для каждой конфигурации. Этот третий вариант кажется лучшим, но он сделает скрипт длиннее, когда я добавлю больше конфигураций (и все возможные перестановки).
Так что, если у premake есть поддержка добавления, и я не знаю об этом, тогда не проблема! Иначе мог бы быть более чистый способ сделать это, о котором я не знаю. Спасибо за прочтение.
1 ответ
Вероятно, самый чистый подход, который вы можете использовать прямо сейчас, заключается в предоставлении вспомогательной функции в вашем скрипте проекта, которую вы затем вызываете из встроенного токена. Может быть что-то вроде:
-- Helper function to assemble the arguments
function buildArguments(cfg)
local args = {}
if cfg.name:find("VULKAN") then
table.insert(args, "VULKAN")
end
if cfg.name:find("OpenGL") then
table.insert(args, "OPENGL")
end
if cfg.name:find("Debug") then
table.insert(args, "DEBUG")
end
if cfg.name:find("Release") then
table.insert(args, "RELEASE")
end
return table.concat(args, " ")
end
-- Use it like this
buildcommands "SomeCmd.exe %{buildArguments(cfg)}"