我正在为 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 gcc
或 info gcc
。