我最近开始使用 Rake 来构建我的一些(非 ruby)包。Rake 很好,但我发现缺少的是一种进行分层构建的方法(在子目录中聚合 Rakefiles)。由于这是大多数其他构建工具的常见功能,我想知道是否有更熟悉 Rake 的人有一个好的解决方案。
HJ
问问题
1351 次
4 回答
2
我会推荐 Buildr 用于非 Ruby 构建任务。它基于 Rake(位于它之上,允许您使用 Rake 的所有功能),但更适合编译语言的语义。它还支持分层构建。
于 2008-09-18T05:53:32.633 回答
1
我也想不出办法做到这一点。我最终做了:
SUBDIR = "subdir"
task :subtask => SRC_FILES do |t|
chdir(SUBDIR) do
system("rake")
end
end
task :subtaskclean do |t|
chdir(SUBDIR) do
system("rake clean")
end
end
task :subtaskclean do |t|
chdir(SUBDIR) do
system("rake clobber")
end
end
task :default => [:maintask, :subtask]
task :clean => :subtaskclean
task :clobber => :subtaskclobber
有点烂 其实,真的很烂。我搜索了文档,但找不到相当于<antcall>
我敢肯定,因为它都是 Ruby 并且我几乎不知道 Ruby,所以有一些非常明显的方法来实现require
它或其他东西。
于 2008-09-23T20:07:51.407 回答
1
Buildr 使用范围的概念,加上项目的名称。
Rake.application.current_scope 应该是发现如何使用它们的入口点。我希望这有帮助。
于 2010-08-01T12:09:05.680 回答
0
我用来解决这个问题的解决方法是:
Dir.chdir(File.dirname(Rake.application.rakefile))
该语句必须在每个 rakefile 的开头,在除根之外的层次结构中的每个级别上运行。一个在实践中如何工作的简短示例:
/耙文件:
task :default do
sh "rake -f component/rakefile"
end
/组件/rakefile
Dir.chdir(File.dirname(Rake.application.rakefile))
task :binary => OBJECTS do
sh "gcc #{SOURCES} -Iinclude -o #{TARGET}"
end
由于我是 rake 新手,我不相信这是解决它的最干净的方法,但这是我最终让它发挥作用的方式。
于 2015-05-01T22:54:04.803 回答