附加到 premake 中的构建命令

Appending to buildcommands in premake

我正在使用配置为 {"VulkanDebug", "VulkanRelease", "OpenGLDebug", "OpenGLRelease"} 的 premake makefile 项目,并希望将 DEBUG / RELEASEVULKAN / 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.batVULKANRELEASE .

我有一些变通办法,但它们对我来说都很丑陋。首先是将整个配置名称作为参数传递给脚本并在那里进行解析。真的不喜欢像那样把争论聚集在一起。第二个是为 VULKANOPENGL 的 premake 脚本创建命令行参数,并且只有 DEBUGRELEASE 作为配置。据我所知,这将为 Vulkan 和 OpenGL 生成单独的项目文件,这似乎有点过分了。最后,我可以为每个配置提供完整的构建命令。第三个选项似乎是最好的,但一旦我添加更多配置(以及所有可能的排列),它会使脚本更长。

因此,如果 premake 具有追加支持,而我对此一无所知,那就没问题了!否则可能会有一种我不知道的更简洁的方法。感谢阅读。

您现在可以使用的最干净的方法可能是在您的项目脚本中提供一个辅助函数,然后您可以从内联令牌中调用它。可能是这样的:

-- 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)}"