このページには、C++ プロジェクトで Bazel を使用する際に役立つリソースが記載されています。チュートリアル、ビルドルール、Bazel を使用した C++ プロジェクトのビルドに固有の情報にリンクします。
Bazel の使用
C++ プロジェクトで Bazel を使用する際には、次のリソースを参照してください。
- チュートリアル: C++ プロジェクトのビルド
- C++ の一般的なユースケース
- C/C++ ルール
- 必須ライブラリ
- C++ ツールチェーンの構成
- チュートリアル: C++ ツールチェーンの構成
- C++ ルールとの統合
ベスト プラクティス
一般的な 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
引数を使用します。