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

标签 c gcc rake

我需要创建一个 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/

相关文章:

ruby-on-rails - 当我运行 rake :db migrate command I get an error "Uninitialized constant CreateArticles" 时

ruby-on-rails - rails sphinx reindex 使用 delayed_job rake 任务

ruby-on-rails - 在 seeds.db 中创建或更新记录

c - 位读取器在连续非 8 倍数读取时失败

C - 为什么这个程序不安全?

c - 有时我的程序会出现段错误,但有时它可以工作,但我找不到失败的地方

c++ - 使用 GCC 优化 C/C++ 循环中的嵌套 if 语句

c - if(VALUE & 0xFF00) 此条件的行为是什么

c - 编译时出现多个相同错误 "error: expected ' )' before ' *' token

c++ - gcc 确保没有编译任何 c++ isms?