IT虾米网

c++之帮助进行 rake 依赖映射

xmjava 2024年01月11日 编程语言 173 0

我正在为 C++ 项目编写 Rakefile。我希望它自动识别 #includes,强制重建依赖于已更改源文件的目标文件。我有一个可行的解决方案,但我认为它可以更好。我正在寻找以下方面的建议:

  • 改进我的功能的建议
  • 为我工作的库、gem 或工具
  • 指向很酷的 C++ Rakefile 的链接,我应该查看它做类似的事情

这是我目前所拥有的。它是一个返回给定源文件的依赖项列表的函数。我输入给定目标文件的源文件,我想要一个文件列表,这将迫使我重建我的目标文件。

def find_deps( file ) 
  deps = Array.new 
  # Find all include statements 
  cmd = "grep -r -h -E \"#include\" #{file}" 
  includes = `#{cmd}` 
  includes.each do |line| 
    dep = line[ /\.\/(\w+\/)*\w+\.(cpp|h|hpp)/ ] 
    unless dep.nil? 
      deps << dep # Add the dependency to the list 
      deps += find_deps( dep ) 
    end 
  end 
  return deps 
end 

我应该注意到我所有的包含现在看起来像这样:

#include "./Path/From/Top/Level/To/My/File.h" // For top-level files like main.cpp  
#include "../../../Path/From/Top/To/My/File.h" // Otherwise 

请注意,我对项目中的包含使用双引号,对外部库包含使用尖括号。我乐于接受有关其他方法的建议,这些方法可以让我的生活更轻松。

请您参考如下方法:

改为使用 gcc 命令生成 Make 依赖列表,并解析它:

g++ -M -MM -MF - inputfile.cpp 

有关详细信息,请参阅 man gccinfo gcc


评论关闭
IT虾米网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!