Я использую предварительный проект makefile с конфигурациями: {"VulkanDebug", "VulkanRelease", "OpenGLDebug", "OpenGLRelease"}
и хочу передать токены DEBUG / RELEASE
и VULKAN / OPENGL
сценарию в buildCommands
.
Например, если конфигурация равна VulkanRelease
, команда сборки имеет значение 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
.
У меня есть несколько обходных путей, но все они кажутся мне уродливыми. Во-первых, передать полное имя конфигурации в качестве аргумента сценарию и проанализировать его там. Не особо люблю собирать аргументы в кучу. Во-вторых, создать аргументы командной строки для сценария предварительной сборки для VULKAN
или OPENGL
и иметь только DEBUG
и RELEASE
в качестве конфигураций. Насколько я знаю, это создаст отдельные файлы проекта для Vulkan и OpenGL, что кажется излишним. Наконец, я мог предоставить полную команду сборки для каждой конфигурации. Этот третий вариант кажется лучшим, но он сделает скрипт длиннее, когда я добавлю больше конфигураций (и всех возможных перестановок).
Так что, если у premake есть поддержка добавления, а я не знаю об этом, то это не проблема! В противном случае может быть более чистый способ сделать это, о котором я не знаю. Спасибо за чтение.