如何用rake进行分层构建?

时间:2008-09-18 05:50:53

标签: build rake

我最近开始使用Rake构建一些我的(非ruby)软件包。 Rake很好,但我发现缺少的是一种进行分层构建的方法(子目录中的聚合Rakefiles)。由于这是大多数其他构建工具的常见功能,我想知道是否有更熟悉Rake的人有一个很好的解决方案。

4 个答案:

答案 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

由于我刚接触耙子,我不相信这是解决它的最干净的方法,但这是我最终让它发挥作用的方式。