2016-06-28 5 views
4

私は新しいプロジェクトを開始しており、ビルドシステムを選択する必要があります。すべてのC++ソースファイルをビルドルールに手動で追加する必要はありません.2016年までに自動化する必要があるため、リファクタリング時に余計な作業が必要になるためです(ヘッダー、ソースファイル、およびビルドシステムファイル...)。Bazelは、ファイルのグロビングでCMakeと同じ問題がありますか?

私はこの記事に出くわしたとき、私は再帰的なファイルはグロブでCMakeのを使用し始めていた

Specify source files globally with GLOB?

グロブは悪であることを示唆している2つの用のビルドフェーズ(cmakeのとします)と、通常の使用中に使用しているためCMakeので、ユーザは第2段階(make)を再実行するだけです。

一見して、Bazelはファイルグロブを許可します。バゼルと一緒に使うのは悪いのですか? findをコードベースで実行しているため、実際にシステムを構築するスケーリングの問題は避けなければなりませんか?

答えて

3

Bazelでglobを使用すると、大きなグロブの解析が長くなる可能性がありますが、 - watchfsフラグを使用すると、ファイルシステムの変更をファイルシステムのイベントを監視するのではなく、増分ビルドが本当に速くなるはずです。 Bazelはすなわち、そのポストで述べた問題を持っていない

+2

塩の穀物でこれを取る。これは、あなたのグロブが時計のシステム限界を超えていない限り、動作します。 Ubuntu上では、これは例えばです。 〜8k。 – abergmeier

6

(私たちは あなたのソースツリーからソースファイルのリストを収集するためにGLOBを使用することはお勧めしませんノーCMakeLists.txtファイルが変更された場合。ソースは が追加または除去されたときに生成されたビルドシステムが再生成するにCMakeを頼む したときに知ることができません。)

Bazelは何かが、追加、削除またはグロブの試合から変更された場合、常に気づき、それに応じて再構築します

。 Globbingは決してあなたにBazelの古い結果を与えません。

です。グロブの場合はin the build encyclopediaと記載されているため、globを使用する前にそれを読んでください。

また、あなたはbazelクエリを使用してグロビングされているかを見ることができます。

bazel query '//path/to/your:target' --output=build 
# /Users/kchodorow/gitroot/path/to/your/BUILD:7:1 
java_library(
    name = "target", 
    srcs = ["//path/to/your:A.java", "//path/to/your:B.java"], 
) 

これは「評価され、」グロブを出力しますので、あなたが遊んでBazelは入力を追跡する方法を見ることができます。

関連する問題