如何获取 Rakefile 以自动重建依赖项文件

How do I get a Rakefile to automatically rebuild a dependency file?

本文关键字:重建 依赖 文件 Rakefile 何获取 获取      更新时间:2023-10-16

我正在使用 rake 进行C++项目。 我正在使用 gcc -MM -MF 自动生成依赖项,并"导入"以导入它们。 目前为止,一切都好。

但是,rake 不会在应该重建"depends.mf"文件时重建。 Ruby 文档中的示例是错误的:

file ".depends.mf" => [SRC_LIST] do |t|
  sh "makedepend -f- -- #{CFLAGS} -- #{t.prerequisites} > #{t.name}" 
end
import ".depends.mf" 

当SRC_LIST包含的任何文件也发生更改时,需要重建 .depends.mf 文件。 例如,假设SRC_LIST是单个文件 a.cpp,而该文件 #includes a.hpp。 如果我们修改 a.hpp,我们可能会修改它以 #include 新文件,因此我们需要重新制作 .depends.mf,但上面的行不会这样做。

所以我们真的希望.depends.mf依赖于源文件所依赖的相同的东西。 这些东西列在.depends.mf中。 很容易将 .depends.mf 修改为提及自己(gcc -MT 'foo.o foo.mf'(,但这不起作用:rake 只在阅读之前决定是否重建 .depends.mf。 阅读后不会重建它。

那么,我该怎么办? 切换到 SCONS? ;)

答案很简单:

Rake::MakefileLoader.new.load(".depends.mf") if File.file?(".depends.mf")