我需要创建一个 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
关于c - 如何创建匹配来自不同文件夹的文件的 rake 规则?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29956928/