多文件rake构建

pas*_*czi 6 rake

我有一个构建系统,它包含几个带项目的子目录,每个子目录中都有一个单独的rakiefile(或几个rakefiles).没有顶级目录有一个遍历所有子目录的rakefile并通过:system("rake")调用rake,得到生成的包并将它们发送到适当的机器.这样做有更优雅的方式吗?我已经尝试过Rake.application.load()但是这似乎不接受任何关于必须加载哪个文件的参数(正如我所提到的,有时每个子目录中有2个rakefiles),

pas*_*czi 2

好的,我有基于 knoopx 所说的解决方案。这是我的主文件:

task :default do
    FileList["*/**/rakefile*.rb"].each do |project|
        # clear current tasks
        Rake::Task.clear
        #load tasks from this project
        load project
        if !Rake::Task.task_defined?(:default)
            puts "No default task defined in #{project}, aborting!"
            exit -1
        else
            dir = project.pathmap("%d")
            Dir.chdir(dir) do
                default_task = Rake::Task[:default]
                default_task.invoke()
            end
        end
    end
    puts "Done building projects"
end
Run Code Online (Sandbox Code Playgroud)

子目录中的每个 rakefile 必须包含默认任务的定义。