C++ と Bazel

問題を報告 ソースを表示

このページでは、C++ プロジェクトで Bazel を使用する際に役立つリソースを紹介します。Bazel を使用した C++ プロジェクトのビルドに固有のチュートリアル、ビルドルール、その他の情報にリンクしています。

Bazel の操作

C++ プロジェクトで Bazel を使用する際は、次のリソースが役立ちます。

ベスト プラクティス

Bazel に関する一般的なベスト プラクティスに加えて、C++ プロジェクトに固有のベスト プラクティスを以下に示します。

BUILD ファイル

BUILD ファイルを作成する場合は、以下のガイドラインに従ってください。

  • BUILD ファイルには、ディレクトリ内のコンパイル単位ごとに 1 つの cc_library ルール ターゲットを含める必要があります。

  • インクリメンタリティを最大化し、ビルドを並列化するために、C++ ライブラリをできる限りきめ細かく制御する必要があります。

  • srcs にソースファイルが 1 つある場合は、ライブラリにその C++ ファイルの名前と同じ名前を付けます。このライブラリには、C++ ファイル、一致するヘッダー ファイル、ライブラリの直接的な依存関係が含まれている必要があります。例:

    cc_library(
        name = "mylib",
        srcs = ["mylib.cc"],
        hdrs = ["mylib.h"],
        deps = [":lower-level-lib"]
    )
    
  • ファイル内の cc_library ターゲットごとに 1 つの cc_test ルール ターゲットを使用します。ターゲット [library-name]_test とソースファイルに [library-name]_test.cc という名前を付けます。たとえば、上記の mylib ライブラリ ターゲットのテスト ターゲットは次のようになります。

    cc_test(
        name = "mylib_test",
        srcs = ["mylib_test.cc"],
        deps = [":mylib"]
    )
    

含めるパス

インクルード パスに関する次のガイドラインに従ってください。

  • すべてのインクルード パスは、ワークスペース ディレクトリを基準とする相対パスにします。

  • システム以外のヘッダーには、山かっこ(#include <foo/bar/baz.h>)ではなく、引用符付きインクルード(#include "foo/bar/baz.h")を使用します。

  • .(現在のディレクトリ)や ..(親ディレクトリ)などの UNIX ディレクトリ ショートカットは使用しないでください。

  • 接頭辞を必要とする外部リポジトリなど、プロジェクト リポジトリの外部を指す必要がある以前のコードまたは third_party コードの場合は、cc_library ルール ターゲットで include_prefix 引数と strip_include_prefix 引数を使用します。