下面的 Rakefile 是一个简单的程序,它需要 a.c
和 a.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.o
或 a.out
时有效,但当 a.c
更新时无效。
$ rake
gcc -c -o a.o a.c
gcc -o a.out a.o
$ touch a.c
$ rake
这是有意为之的行为吗?还是我遗漏了什么?
代替:
sh "gcc -o #{t.name} #{t.prerequisite_tasks.collect(&:name).join(' ')}"
试试这个:
`gcc -o #{t.name} #{t.prerequisite_tasks.collect(&:name).join(' ')}`
我倾向于对系统命令使用反引号(与 ~ 相同的键,在 Esc 键下方),也许这会纠正该行为。
我是一名优秀的程序员,十分优秀!