このページでは、さまざまなレベルで 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++ ルールでは、特別な方法を使用して、 構成します。コマンドラインを作成するには、 次のものが必要です。
features
とaction_configs
-CcToolchainConfigInfo
から取得CcToolchainInfo
にカプセル化されます。FeatureConfiguration
- cc_common.configure_features によって返されます。- cc ツールチェーン構成変数 - 以下で返されます cc_common.create_compile_variables または cc_common.create_link_variables.
他にも、次のようなツール固有のゲッターがあります。
compiler_executable。
ツール固有のゲッターは、これらのプロパティよりも get_tool_for_action
を優先します。
最終的に削除されます。
完全な動作例については、このモジュールの rules_cc の例で確認できます。
C++ ルールに依存する Starlark ルールや C++ ルールが依存できる Starlark ルールを実装する
ほとんどの C++ ルールでは、
CcInfo
CompilationContext
を含むプロバイダ
および
LinkingContext
。
これにより、すべての推移的ヘッダー、
リンクを設定します。CcInfo
と CcToolchainInfo
カスタム
Starlark ルールでは、必要な情報をすべて取得できます。
Starlark のカスタムルールで CcInfo
が指定されている場合、そのルールは C++ ルールへのシグナルになります。
頼れる存在です。ただし、変更を伝播させるだけの場合は
CcInfo
で、グラフをバイナリルールに進み、それを利用するバイナリルールに進み、
別のプロバイダの CcInfo
。たとえば、java_library
ルールを使用して
ネイティブ依存関係を java_binary
まで伝播させるには、
CcInfo
を直接(java_library
に依存する cc_binary
は意味をなしません)、
(例: JavaCcInfo
)でラップする必要があります。
完全な動作例については、このモジュールの rules_cc の例で確認できます。
C++ ルールのロジックとアクションを再利用する
まだ安定していません。このセクションは、API が安定したら更新されます。フォロー #4570(最新) 情報です。