2009-04-15 7 views
4

Boost.Buildが#includeディレクティブを再帰的にスキャンするヘッダファイルを特定のディレクトリまたはディレクトリセットに限定する方法はありますか?私。私は再帰的に私のプロジェクト内のヘッダーファイルをスキャンしたいです。私は彼らが外部の依存関係は変更されないことを知っています(BoostとQtはかなり大きいです)。依存関係ツリーには約50,000のターゲットがあり、処理に時間がかかります(実際にファイルが変更されていなくても1〜2分のビルド時間になります)。Boost.Buildが#includeディレクティブのヘッダファイルを再帰的にスキャンしないようにする方法はありますか?

私が今までに見つけた唯一の解決策は、INCLUDE環境変数(私はMSVCを使用しています)を利用することです - これはBoost.Buildがインクルードパスを知らせる必要がないことを意味します)、スキャンされません。これは少しハックのようです。

私はすぐにこれに遭遇したにもかかわらず、私は同じような問題を経験している他の人々を見つけることができなかったので、私は何かが明らかに欠けているに違いないように感じます。私が一番近いのはhereです。

デバッグ出力(bjam -d 3)から判断すると、ほとんどのヘッダーファイルも2回以上スキャンされます...これは、依存関係として2回以上追加されていることを意味するのかどうかはわかりませんが、ファイルを読み込んで内容全体をスキャンするコストが足りなければなりませんか?

私は、ヘッダーファイルが変更されないことを保証できる特定のディレクトリまたはディレクトリのセットをスキャンすることを邪魔しないと言うことができれば、それは完璧なものになります。

答えて

2

この質問はBoostメーリングリストにも掲載されており、回答はhttp://lists.boost.org/boost-build/2009/04/21734.phpです。

これまでのところ、少なくともBoost.Buildにはこの機能はなく、解決策はBoostをカスタマイズすることです。あなたのニーズに合わせて構築すれば、一定の意味合いが得られます。

しかし、なぜこれが人々にとってより一般的な問題ではないのか、私はまだ不思議です。私は依存関係をキャッシュすると時間が短縮されることがわかりますが、確かにスキャンすればすべて外部ライブラリ巨大な依存関係のツリーになってしまいます。私がプロジェクトに取り掛かっているとき、私は第三者図書館を非常に頻繁に変更するつもりはないが、それらの依存関係をチェックするのは残念だ。

1

SConsのような代替ビルドツールをチェックアウトしたい場合があります。 SConsにはモード--implicit-cacheがあり、暗黙的な依存関係がキャッシュされます。これはあなたが記述したシナリオに役立ちます。

ここにはman pageの抜粋があります。

--implicit-cache
キャッシュ暗黙の依存関係。これにより、暗黙の依存関係のためにファイルをスキャンするのではなく、スキャンが実行された最後の時点から暗黙の(スキャンされた)依存関係が使用されます。これによりSConsは大幅に高速化できますが、次のような制限があります。 sconsは、通常、同じ名前のファイルの異なるバージョンを使用する暗黙的な依存性検索パス(CPPPATH、LIBPATHなど)の変更を検出しません。 暗黙の依存性検索パス(例えば、CPPPATH、LIBPATH)で新しい暗黙的依存性が以前に追加された場合、暗黙の依存性の変更は同じ名前の現在の暗黙的依存性よりもスキンが逃してしまいます。

--implicit-deps-changed
SConsにキャッシュされた暗黙の依存関係を強制的に無視させます。これにより、暗黙の依存関係が再スキャンされ、再キャッシュされます。これは暗黙のキャッシュを意味します。

--implicit-deps-unchanged
SConsが暗黙的な依存関係の変更を無視します。これにより、キャッシュされた暗黙の依存関係が常に使用されます。これは暗黙のキャッシュを意味します。

+0

ありがとうございました!しかし、私の問題は、システムを構築するのではなく、Boost.Buildの理解に欠けていたものです。 –

関連する問題