Добавление к командам сборки в 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)}"
Другие вопросы по тегам