1

私はC++プロジェクトにrakeを使用しています。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であり、#includesa.hppであるとします。a.hppを変更すると、#include new filesに変更される可能性があるため、.depends.mfを再作成する必要がありますが、上記の行では変更されません。

したがって、.depends.mfは、ソースファイルが依存しているものと同じものに依存する必要があります。そして、それらのものは.depends.mfにリストされています。.depends.mfをマングルして自分自身に言及するのは簡単ですが(gcc -MT'foo.o foo.mf')、それは機能しません。rakeは、.depends.mfを読み取るに再構築するかどうかを決定するだけです。それを読んだ後、それはそれを再構築しません。

だから、私は何をすべきですか?SCONSに切り替えますか?;)

4

1 に答える 1

2

答えは簡単です:

Rake::MakefileLoader.new.load(".depends.mf") if File.file?(".depends.mf")
于 2012-05-18T14:01:09.483 に答える