在 Cakebuild 中创建任务序列
Create a task sequence in Cakebuild
我正在使用 Cake 0.23.0,很高兴看到任务依赖项已扩展。不幸的是,即使是最新版本似乎也无法解决我的问题。 还是我做错了什么?
我想达到的目标
- 假设我定义了对多个平台(例如 x86 或 x64)相同的任务
- 我想定义一个构建顺序,首先为平台 x86 执行所有任务。一旦完成,应该执行一个 init 任务,它只是将平台设置为 x64,然后应该执行与 x86 相同的任务。
- 示例序列:
任务初始化 x86 -> 任务 A -> 任务 B -> 任务 C -> 任务初始化 x64 -> 任务 A -> 任务 B -> 任务 C
当前行为
结果序列是
任务初始化 x86 -> 任务 A -> 任务 B -> 任务 C -> 任务初始化 x64
Cake 似乎只尊重任务依赖一次。我已将其定义如下所示:
Task("Compile-All-Platforms")
.IsDependentOn("Init-86")
.IsDependentOn("A")
.IsDependentOn("B")
.IsDependentOn("C")
.IsDependentOn("Init-x64")
.IsDependentOn("A")
.IsDependentOn("B")
.IsDependentOn("C");
如果你想分两步构建,最简单的方法是将 A、B 和 C 的构建逻辑封装在辅助函数中,然后将它们包装在 x86 或 x64 任务中。这里的想法是利用 Cake 能够为您创建的依赖关系树,而不是在 Compile-All 中写下所有依赖关系。实际上,这就是您要使用构建协调器的主要原因。
当然,这是让它适用于 3 个任务和 2 个平台的直接方法。一个更具可扩展性的解决方案是创建和添加或接受 "platform" 参数并构建 N 个项目的帮助脚本。
请注意,下面的代码仅显示如何完成您的要求,但需要使用适当的 WithCriteria 说明进行改进。如果按原样使用,将无法仅构建 x64。
Task("Compile-x86"){
BuildA();
BuildB();
BuildC();
};
Task("Init-x64")
.IsDependentOn("Compile-x86"){
//Your init code goes here
};
Task("Compile-x64")
.IsDependentOn("Init-x64"){
BuildA();
BuildB();
BuildC();
};
Task("Compile-All-Platforms")
.IsDependentOn("Compile-x64");
我正在使用 Cake 0.23.0,很高兴看到任务依赖项已扩展。不幸的是,即使是最新版本似乎也无法解决我的问题。 还是我做错了什么?
我想达到的目标
- 假设我定义了对多个平台(例如 x86 或 x64)相同的任务
- 我想定义一个构建顺序,首先为平台 x86 执行所有任务。一旦完成,应该执行一个 init 任务,它只是将平台设置为 x64,然后应该执行与 x86 相同的任务。
- 示例序列: 任务初始化 x86 -> 任务 A -> 任务 B -> 任务 C -> 任务初始化 x64 -> 任务 A -> 任务 B -> 任务 C
当前行为 结果序列是 任务初始化 x86 -> 任务 A -> 任务 B -> 任务 C -> 任务初始化 x64
Cake 似乎只尊重任务依赖一次。我已将其定义如下所示:
Task("Compile-All-Platforms")
.IsDependentOn("Init-86")
.IsDependentOn("A")
.IsDependentOn("B")
.IsDependentOn("C")
.IsDependentOn("Init-x64")
.IsDependentOn("A")
.IsDependentOn("B")
.IsDependentOn("C");
如果你想分两步构建,最简单的方法是将 A、B 和 C 的构建逻辑封装在辅助函数中,然后将它们包装在 x86 或 x64 任务中。这里的想法是利用 Cake 能够为您创建的依赖关系树,而不是在 Compile-All 中写下所有依赖关系。实际上,这就是您要使用构建协调器的主要原因。
当然,这是让它适用于 3 个任务和 2 个平台的直接方法。一个更具可扩展性的解决方案是创建和添加或接受 "platform" 参数并构建 N 个项目的帮助脚本。
请注意,下面的代码仅显示如何完成您的要求,但需要使用适当的 WithCriteria 说明进行改进。如果按原样使用,将无法仅构建 x64。
Task("Compile-x86"){
BuildA();
BuildB();
BuildC();
};
Task("Init-x64")
.IsDependentOn("Compile-x86"){
//Your init code goes here
};
Task("Compile-x64")
.IsDependentOn("Init-x64"){
BuildA();
BuildB();
BuildC();
};
Task("Compile-All-Platforms")
.IsDependentOn("Compile-x64");