帮助rake依赖关系映射

the*_*ess 3 c++ ruby rake build

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

  • 建议改善我的功能
  • 为我工作的图书馆,宝石或工具
  • 链接到酷C++ Rakefiles,我应该检查,做类似的事情

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

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
Run Code Online (Sandbox Code Playgroud)

我应该注意到我的所有包含现在都是这样的:

#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
Run Code Online (Sandbox Code Playgroud)

请注意,我在项目中使用双引号,外部库包括尖括号.我愿意接受有关使用包含路径的替代方法的建议,这些方法可以让我的生活更轻松.

gre*_*ade 6

使用gcc命令来生成Make依赖项列表,并解析:

g++ -M -MM -MF - inputfile.cpp
Run Code Online (Sandbox Code Playgroud)

查看man gccinfo gcc了解详情.