I'm using a premake makefile project with the configurations: {"VulkanDebug", "VulkanRelease", "OpenGLDebug", "OpenGLRelease"}
and want to pass DEBUG / RELEASE
and VULKAN / OPENGL
tokens to the script in buildCommands
.
For example, when the configuration is VulkanRelease
, the buildcommand is script.bat VULKAN RELEASE
and the script is responsible for deciding what to do with those tokens.
My ideal solution is (using invalid logic):
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")
If I use buildcommands
the normal way, visual studio will consider it as three separate commands to execute: script.bat
, VULKAN
, and RELEASE
.
I have a few workarounds but they all feel ugly to me. First is to pass the entire configuration name as an argument to the script and parse it there. Not really a fan of clumping arguments together like that. The second is to create command line arguments to the premake script for VULKAN
or OPENGL
and only have DEBUG
and RELEASE
as the configurations. As far as I know this will generate separate project files for Vulkan and OpenGL, which seems like overkill. Finally, I could supply the full build command for each configuration. This third option seems the best but it will make the script longer once I add more configurations (and all possible permutations).
So if premake has append support and I don't know about it, then non-issue! Otherwise there might be a cleaner way of doing this that I don't know about. Thanks for reading.
Probably the cleanest approach that you can use right now today is to provide a helper function in your project script, which you then call from an inline token. Maybe something like: