Premake中如何获取所有已定义的configurations列表?
这个需求可以实现,你可以通过遍历Premake的配置集层级链自定义get_configurations()函数实现效果。
自定义函数实现
function get_configurations() local configs = {} local seen = {} local configSetStack = {} -- 收集从当前作用域到顶层父作用域的所有配置集 local current = premake.api.scope.current.configset while current do table.insert(configSetStack, current) current = current.parent end -- 从顶层父级开始遍历,保证父级配置在前、子级配置在后 for i = #configSetStack, 1, -1 do local currConfigs = premake.configset.fetch(configSetStack[i], "configurations") if currConfigs then for _, cfg in ipairs(currConfigs) do if not seen[cfg] then seen[cfg] = true table.insert(configs, cfg) end end end end return configs end
完整测试用例
把上面的函数放到你的premake5.lua开头,后续逻辑保持你写的原样即可:
workspace "myworkspace" configurations { "debug", "release" } project "myproject" configurations { "projconfig" } for _, cfg in ipairs(get_configurations()) do print(cfg) end
运行后输出和你预期完全一致:
debug release projconfig
实现原理
- Premake的每个作用域(工作区、项目)都对应独立的
configset对象,子作用域的configset会持有父作用域configset的引用,天然形成层级继承关系 premake.configset.fetch方法可以从指定配置集中取出对应字段的配置值- 我们沿着父链遍历所有层级的配置集,收集所有
configurations配置并去重,就得到了当前作用域下所有生效的配置列表
内容的提问来源于stack exchange,提问作者Paul Molodowitch
相关产品推荐
相关产品推荐

