如何创建匹配来自不同文件夹的文件的rake规则?

How to create a rake rule that matches files from different folders?

我需要创建一个 rake 规则,将 'src' 文件夹中的每个 C 文件编译为 'obj' 文件夹中的相应文件。在 make 中,这是通过以下方式实现的:

obj/%.o: src/%.c

我一直在尝试找出如何在 rake 中完成此操作,但找不到解决方案。这是佣金代码:

SOURCES = Rake::FileList["src/*.c"]
OBJECTS = SOURCES.ext(".o").pathmap("obj/%f")

task :binary => OBJECTS do
    sh "gcc #{OBJECTS} --shared -o TARGET"
end

rule '.o' => '.c' do |task|
    sh "gcc -c src/#{task.source}"
end

task :default => :binary

当此代码为运行时,抛出以下错误:

rake aborted!
Don't know how to build task 'obj/cx.o'

想通了。以下抽成代码有效:

rule '.o' => ->(t){t.pathmap("src/%f").ext(".c")} do |task|
    sh "gcc -c #{task.source} -o #{task.name}"
end