C++ と Bazel

<ph type="x-smartling-placeholder"></ph> 問題を報告する ソースを表示 夜間 · 7.3 · 7.2 · 7.1 · 7.0 · 6.5

このページには、C++ プロジェクトで 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 コードに、 プレフィックスを必要とする外部リポジトリなど、プロジェクト リポジトリ。 include_prefixstrip_include_prefix cc_library ルール ターゲットの引数。

ツールチェーンの機能

次のオプションの機能 C++ プロジェクトの健全性を向上させることができます。これらを有効にするには、 --features コマンドライン フラグまたは features repo, package ルールまたは cc_* ルール:

  • parse_headers 機能により、C++ コンパイラを使用して解析が行われます。 ビルドされたターゲット内のすべてのヘッダー ファイルとその依存関係(コンパイルは対象外) 使用する際は、 --process_headers_in_dependencies 設定されます。これにより、ヘッダーのみのライブラリの問題を検出し、 ヘッダーは自己完結型であり、その順序に関係なく 含まれます。
  • layering_check 機能により、ターゲットにはヘッダーのみが含まれるようになります。 メリットが得られます。デフォルトのツールチェーンはこれをサポートしています。 (clang をコンパイラとして使用)