I use CAKE 0.22.0.
Depending on the arguments passed into build.cake
, I want to load different .cake
files. E.g., if the parameter VisualStudioVersion
has the value 2013
, I want to load the vs2013dlls.cake
file; if it has the value 2015
, then I want to load the vs2015dlls.cake
file; etc.
Looking at the CAKE page on preprocessor directives, I don't see any information on preprocessor keywords such as #if
and #else
.
I would prefer not to copy the contents of the other .cake
files into build.cake
, lest build.cake
becomes much too bloated.
How can I load .cake
files conditionally?
Currently there's no support for conditionals when it comes to script loading the 0.23.0 will add if def support but pre processor directives are processed as same level/priority so won't help for your specific problem.
What you could do though is create a small bootstrapper cake script that pulls in the pieces needed for your specific scenarios.
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(
"\r\n",
statements
),
currentDir
);
CakeExecuteExpression(
expression
);
For above if argument VisualStudioVersion is set to 2017 or no argument specified then it'll load
If argument VisualStudioVersion is set to 2013 then it'll load
Perhaps less complex is to just provide to different entry points i.e. have a build.cake
file call either vs2013.cake
or vs2017.cake
depending on argument.
Information("This will execute regardless version!") ;
#load "common.cake"
Information("Hello VS2013!");
#load "common.cake"
Information("Hello VS2017!");
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));
}
cake .\executescript.cake
Will output
This will execute regardless version!
Hello VS2017!
cake .\executescript.cake --VisualStudioVersion=2013
will output
This will execute regardless version!
Hello VS2013!
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With