我有一个Rakefile,它根据全局变量 $build_type
以两种方式编译项目,它可以是 :debug
或 :release
(结果放在不同的目录中):
task :build => [:some_other_tasks] do
end
我希望创建一个任务,依次编译项目的两个配置,如下所示:
task :build_all do
[ :debug, :release ].each do |t|
$build_type = t
# call task :build with all the tasks it depends on (?)
end
end
有没有办法将任务称为方法?或者我怎样才能达到类似的效果呢?
7 回答
如果您需要将任务作为一种方法,那么使用实际方法呢?
如果你更愿意坚持使用rake的习语,那么根据过去的答案编译你的可能性:
(请注意,已经调用的依赖项不会被重新执行)
例如:
那应该让你理智,我自己也需要同样的东西 .
如果您希望每个任务都能运行而不管任何失败,您可以执行以下操作:
如果项目真的是被编译的结果,那么我建议不要创建一般的调试和发布任务 . 您应该使用在您的示例中非常可行的文件任务,如您所述,您的输出将进入不同的目录 . 假设您的项目只是使用gcc将test.c文件编译为out / debug / test.out和out / release / test.out,您可以像这样设置项目:
此设置可以使用如下:
这有点像所要求的那样,但显示了我的观点:
根据需要创建
输出目录 .
仅在需要时重新编译文件(此示例仅适用于最简单的test.c文件) .
如果要触发发布版本或调试版本,您可以随时掌握所有任务 .
此示例包含一种定义调试版本和发布版本之间的小差异的方法 .
无需重新启用使用全局变量进行参数化的构建任务,因为现在不同的构建具有不同的任务 . 构建任务的代码重用是通过重用代码来定义构建任务来完成的 . 看看循环如何不执行两次相同的任务,而是创建任务,以后可以触发(通过全部任务或在rake命令行上选择其中一个) .