Conditionally load .cake files
我使用 CAKE 0.22.0.
根据传递给
查看预处理器指令的 CAKE 页面,我没有看到任何关于预处理器关键字的信息,例如
我不希望将其他
如何有条件地加载
目前在加载脚本时不支持条件,如果支持,0.23.0 将添加 if def 支持,但预处理器指令被处理为相同级别/优先级,因此对您的特定问题没有帮助。
您可以做的是创建一个小的引导程序蛋糕脚本,用于提取特定场景所需的部分。
使用 CakeExecuteExpression 的示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | var visualStudioVersion = Argument("VisualStudioVersion","2017"); var statements = new List<string>(); var currentDir = MakeAbsolute(Directory("./")); statements.Add("#load "{0}/common.cake""); switch(visualStudioVersion) { case"2013": statements.Add("#load "{0}/vs2013.cake""); break; case"2017": statements.Add("#load "{0}/vs2017.cake""); break; default: throw new Exception(string.Format("Unknown VisualStudioVersion: {0}", visualStudioVersion)); } var expression = string.Format( string.Join( "\ \ ", statements ), currentDir ); CakeExecuteExpression( expression ); |
如果参数 VisualStudioVersion 设置为 2017 或未指定参数,那么它将加载
- 普通蛋糕
- vs2017.cake
如果参数 VisualStudioVersion 设置为 2013 那么它将加载
- 普通蛋糕
- vs2013.cake
使用 CakeExecuteScript 的示例
也许不太复杂的是只提供不同的入口点,即根据参数有一个
普通蛋糕
1 | Information("This will execute regardless version!") ; |
vs2013.cake
1 2 | #load"common.cake" Information("Hello VS2013!"); |
vs2017.cake
1 2 | #load"common.cake" Information("Hello VS2017!"); |
构建蛋糕
1 2 3 4 5 6 7 8 9 10 11 12 13 | var visualStudioVersion = Argument("VisualStudioVersion","2017"); switch(visualStudioVersion) { case"2013": CakeExecuteScript("vs2013.cake"); break; case"2017": CakeExecuteScript("vs2017.cake"); break; default: throw new Exception(string.Format("Unknown VisualStudioVersion: {0}", visualStudioVersion)); } |
2017年产出
1 | cake .\\executescript.cake |
将输出
2013年产出
1 | cake .\\executescript.cake --VisualStudioVersion=2013 |
将输出