C++ ルールとの統合

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

このページでは、さまざまなレベルで C++ ルールと統合する方法について説明します。

C++ ツールチェーンへのアクセス

理由 C++ ルールの継続的な移行 特定のプラットフォームツールチェーン、 ヘルパー関数を使用 @bazel_tools//tools/cpp:toolchain_utils.bzl, これは、ツールチェーンが無効な場合と有効になっている場合の両方で機能します。C++ リソースへの 使用する場合は、 Label その属性を _cc_toolchain という名前で を @bazel_tools//tools/cpp:current_cc_toolchain(インスタンスの cc_toolchain_alias ルール。現在選択されている C++ ツールチェーンを指します)。 ルールの実装では、 find_cpp_toolchain(ctx)CcToolchainInfo。 完全な動作例については、このモジュールの rules_cc の例で確認できます。

C++ ツールチェーンを使用してコマンドラインと環境変数を生成する

通常は、C++ ツールチェーンと統合して、同じ言語を コマンドライン フラグを使用します。ただし、C++ アクションを直接使用しません。 これは、独自のアクションを記述するときに、そのアクションが C++ ツールチェーンとの一貫性を保つ必要があります。たとえば、C++ コマンドライン C++ コンパイラをバックグラウンドで呼び出すツールに提供します。

C++ ルールでは、特別な方法を使用して、 構成します。コマンドラインを作成するには、 次のものが必要です。

他にも、次のようなツール固有のゲッターがあります。 compiler_executable。 ツール固有のゲッターは、これらのプロパティよりも get_tool_for_action を優先します。 最終的に削除されます。

完全な動作例については、このモジュールの rules_cc の例で確認できます。

C++ ルールに依存する Starlark ルールや C++ ルールが依存できる Starlark ルールを実装する

ほとんどの C++ ルールでは、 CcInfo CompilationContext を含むプロバイダ および LinkingContext。 これにより、すべての推移的ヘッダー、 リンクを設定します。CcInfoCcToolchainInfo カスタム Starlark ルールでは、必要な情報をすべて取得できます。

Starlark のカスタムルールで CcInfo が指定されている場合、そのルールは C++ ルールへのシグナルになります。 頼れる存在です。ただし、変更を伝播させるだけの場合は CcInfo で、グラフをバイナリルールに進み、それを利用するバイナリルールに進み、 別のプロバイダの CcInfo。たとえば、java_library ルールを使用して ネイティブ依存関係を java_binary まで伝播させるには、 CcInfo を直接(java_library に依存する cc_binary は意味をなしません)、 (例: JavaCcInfo)でラップする必要があります。

完全な動作例については、このモジュールの rules_cc の例で確認できます。

C++ ルールのロジックとアクションを再利用する

まだ安定していません。このセクションは、API が安定したら更新されます。フォロー #4570(最新) 情報です。