gpt4 book ai didi

c++ - Rakefile规则输出生成问题

转载 作者:行者123 更新时间:2023-11-30 04:38:55 24 4
gpt4 key购买 nike

我有一个 Rakefile 的规则是这样的:

rule '.so' => '.cc' do |t|
puts "@ Compiling #{t.source}"
output = t.source.ext("so")
output['stdlib'] = 'build'
sh "mkdir -p #{File.dirname(output)}"
sh "#{CXX} #{t.source} -o#{output} #{STDLIB_CFLAGS} #{STDLIB_LFLAGS}"
end

如您所见,它生成了许多 .so 库,从“stdlib”目录(包含源代码)到存储二进制文件的“build”目录。

现在的问题是,由于这种“目录交换”,rake 似乎无法将 .so 文件识别为它生成的文件,导致每次运行 rake 命令时都会重新编译每个 .so 模块,即使没有被改变了。

有什么办法可以解决吗?

谢谢

最佳答案

您可以使用路径映射语法或显式过程将输出文件名/路径更改为输入文件名/路径。

路径图语法看起来像这样(未经测试):

rule '.so' => '%{build,stdlib}X.cc' do |t|
puts "@ Compiling #{t.source}"
sh "mkdir -p #{File.dirname(t.name)}"
sh "#{CXX} #{t.source} -o#{t.name} #{STDLIB_CFLAGS} #{STDLIB_LFLAGS}"
end

proc 方法看起来像这样(也未经测试):

rule '.so' => [proc { |f| f.sub(/build/, 'stdlib').ext('.cc') }] do |t|
puts "@ Compiling #{t.source}"
sh "mkdir -p #{File.dirname(t.name)}"
sh "#{CXX} #{t.source} -o#{t.name} #{STDLIB_CFLAGS} #{STDLIB_LFLAGS}"
end

请注意,您可以在操作中去掉显式的“mkdir”并改用“目录”任务(如果您事先知道可能的目标目录)

possible_dest_dirs.each { |d|
directory d
}

rule '.so' => [proc { |f| f.sub(/build/, 'stdlib').ext('.cc') },
proc { |f| File.dirname(f) }] do |t|
puts "@ Compiling #{t.source}"
sh "#{CXX} #{t.source} -o#{t.name} #{STDLIB_CFLAGS} #{STDLIB_LFLAGS}"
end

关于c++ - Rakefile规则输出生成问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2837584/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com