4

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

4

4 回答 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 回答