Rake的规则不检查时间戳

时间:2014-03-15 18:52:45

标签: ruby rake rakefile

以下Rakefile适用于需要a.ca.h的简单程序。

# Rakefile
task :default => "a.out"

file "a.o" => "a.h"

file "a.out" => "a.o" do |t|
  sh "gcc -o #{t.name} #{t.prerequisite_tasks.collect(&:name).join(' ')}"
end

rule ".o" => ".c" do |t|
  sh "gcc -c -o #{t.name} #{t.source}"
end

在没有a.oa.out时有效,但在a.c更新时无效。

$ rake
gcc -c -o a.o a.c
gcc -o a.out a.o
$ touch a.c
$ rake

这是预期的行为吗?或者我错过了什么?

1 个答案:

答案 0 :(得分:0)

而不是:

sh "gcc -o #{t.name} #{t.prerequisite_tasks.collect(&:name).join(' ')}"

试试这个:

`gcc -o #{t.name} #{t.prerequisite_tasks.collect(&:name).join(' ')}`

我倾向于使用反引号(与Esc键相同的键,用于系统命令),这可能会纠正行为。