我最近开始使用Rake构建一些我的(非ruby)软件包。 Rake很好,但我发现缺少的是一种进行分层构建的方法(子目录中的聚合Rakefiles)。由于这是大多数其他构建工具的常见功能,我想知道是否有更熟悉Rake的人有一个很好的解决方案。
答案 0 :(得分:2)
我建议Buildr用于非Ruby构建任务。它基于Rake(位于它之上,允许您使用Rake的所有功能),但更适合编译语言的语义。它还支持分层构建。
答案 1 :(得分: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
它或其他东西的方式。
答案 2 :(得分:1)
Buildr使用范围的概念,再加上项目的名称。
Rake.application.current_scope应该是发现如何使用它们的入口点。我希望这会有所帮助。
答案 3 :(得分:0)
我以前解决的问题是:
Dir.chdir(File.dirname(Rake.application.rakefile))
除了root之外,每个rakefile的开头都必须在层次结构中的每个级别运行此语句。这是一个在实践中如何运作的缩短示例:
/ Rake文件:
task :default do
sh "rake -f component/rakefile"
end
/组件/ Rake文件
Dir.chdir(File.dirname(Rake.application.rakefile))
task :binary => OBJECTS do
sh "gcc #{SOURCES} -Iinclude -o #{TARGET}"
end
由于我刚接触耙子,我不相信这是解决它的最干净的方法,但这是我最终让它发挥作用的方式。