微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何并行执行 Rake 文件任务

如何解决如何并行执行 Rake 文件任务

我正在使用 Rake 构建一个 C 语言构建系统。 编译多个文件时, 我想使用 cpu 的多个内核并行编译多个文件

你能给我一些关于如何编写 Rake 文件的建议吗? 我想在 Rake 中实现 make -j

作为限制,我不想安装新的 Gem。

为了清楚起见,这里是一个简化的 Rake 文件

CC = "gcc"

task :default => "hello"

file "hello" => ["hello.o","message.o"] do
  sh "#{CC} -o hello hello.o message.o"
end

file "hello.o" => "hello.c" do (1)
  sh "#{CC} -c hello.c"
end

file "message.o" => "message.c" do (2)
  sh "#{CC} -c message.c"
end

对于任务,我可以使用多任务。 但是,对于文件任务,我不知道如何描述它。 我想同时运行文件任务 (1) 和 (2)。

我的环境: ruby 2.6.4p104 (2019-08-28 修订版 67798) [i386-cygwin]

我先谢谢你。

解决方法

您可以创建线程,并且可以在新线程中运行您的文件。

例如

CC = "gcc"

task :default => "hello"

file "hello" => ["hello.o","message.o"] do
  Thread.new do
    sh "#{CC} -o hello hello.o message.o"
  end
end

file "hello.o" => "hello.c" do
  Thread.new do
    sh "#{CC} -c hello.c"
  end
end

file "message.o" => "message.c" do
  Thread.new do
    sh "#{CC} -c message.c"
  end
end
,

我发现 rake -m 将所有任务视为多任务处理。我只为不想并行执行的任务定义了单独的任务。通过指定诸如“rake -m -j 8”之类的内容,我确认构建时间减少了。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。