拡張機能の作成に関する一般的な問題と質問は次のとおりです。
ファイルが作成されない / アクションが実行されないのはなぜですか?
Bazel は、リクエストされた出力ファイルの生成に必要なアクションのみを実行します。
目的のファイルにラベルが付いている場合は、直接リクエストできます。
bazel build //pkg:myfile.txt
ファイルがターゲットの出力グループ内にある場合は、その指定が必要になることがあります。 出力グループを指定します。
bazel build //pkg:mytarget --output_groups=foo
ターゲットがアップグレードされるたびにファイルが自動的にビルドされるようにするには、 ルールのデフォルトの出力に追加したい場合は、
DefaultInfo
プロバイダを返す。
詳しくは、ルールのページをご覧ください。
実装関数が実行されないのはなぜですか?
Bazel は、ビルドに対してリクエストされたターゲットのみを分析します。すべきこと コマンドラインでターゲットに名前を付けるか、 あります。
アクションまたはバイナリの実行時にファイルが見つからない
1)ファイルがアクションへの入力として登録されていること、または 2)実行中のスクリプトまたはツールが 正しいパスです。
アクションの場合は、入力を ctx.actions.*
関数に渡して入力を宣言します。
作成します。ファイルの適切なパスは、次のコマンドを使用して取得できます。
File.path
。
バイナリの場合(bazel run
または bazel test
によって実行される実行可能な出力)
コマンド)で、入力を宣言するには、その変数を
runfiles。path
フィールドの代わりに、次のコマンドを使用します。
File.short_path
: ファイルに対する相対パス
バイナリが実行される runfiles ディレクトリ
bazel build //pkg:mytarget
がビルドするファイルを制御するにはどうすればよいですか?
DefaultInfo
プロバイダを使用して以下を行います。
デフォルトの出力を設定します。
ビルドの一環としてプログラムを実行したり、ファイル I/O を実行したりするにはどうすればよいですか?
ビルドの他の部分と同様に、ツールはターゲットとして宣言できます。
他のターゲットのビルドに役立てることができます。アクションを作成するには
ツールを実行する場合は、ctx.actions.run
を使用して、
executable
パラメータとして指定します。
読み込みフェーズと分析フェーズでは、ツールは実行できず、実行もできない ファイル I/O などです。つまり、ツールとファイルの内容(BUILD の内容を除く)は、 .bzl ファイルなど)は、ターゲット グラフとアクション グラフの作成方法に影響しません。
実行フェーズの前と最中に同じ構造化データにアクセスする必要がある場合はどうすればよいですか?
構造化データは .bzl ファイルとしてフォーマットできます。ファイルを load()
して、
読み込みや分析の段階で参照できます。入力として渡すことも、
実行フェーズで必要とするアクションや実行可能ファイルに内容を渡せるようにします。
Starlark のコードを記録するにはどうすればよいですか?
ルールとルール属性については、docstring リテラル(
三重引用符など)を rule
または attr.*()
の doc
パラメータに追加します。ヘルパー用
関数とマクロを使用する場合は、次の形式の後に三重引用符で囲まれた docstring リテラルを使用します。
こちらをご覧ください。
通常、ルールを実装する関数に独自の docstring は必要ありません。
想定される場所で文字列リテラルを使用すると、 ドキュメントを抽出するツールです文字列以外の標準のコメントを自由に使用できます。 コードの読み手に役立つあらゆるところで 参照できます