the*_*ess 3 c++ ruby rake build
我正在为C++项目编写Rakefile.我希望它能够#includes自动识别,强制重建依赖于已更改源文件的目标文件.我有一个有效的解决方案,但我认为它会更好.我正在寻找以下建议:
这是我到目前为止所拥有的.它是一个函数,它返回给定源文件的依赖项列表.我在源文件中输入给定的目标文件,我想要一个文件列表,这将迫使我重建我的目标文件.
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)
请注意,我在项目中使用双引号,外部库包括尖括号.我愿意接受有关使用包含路径的替代方法的建议,这些方法可以让我的生活更轻松.
使用gcc命令来生成Make依赖项列表,并解析:
g++ -M -MM -MF - inputfile.cpp
Run Code Online (Sandbox Code Playgroud)
查看man gcc或info gcc了解详情.