2017-04-07 16 views
0

ラベル//foo_base:barがあり、foo_base/bar_0_8_9.tarが生成されています。 これをfoo_concrete/bar.tar(パッケージ//foo_concrete)と同じにする必要があります。出力ファイルの名前を他のパッケージに変更する

これは、ファイルのコピーを実行するアクションを記述することで可能になるはずです。しかし、これは過剰なようです。よりエレガントな解決策はありますか?

答えて

2

あなたはシンボリックリンクを作成するためにgenruleを使用することができます。

genrule(
    name = "make_bar_tar", 
    srcs = ["//foo_base:bar"], 
    outs = ["bar.tar"], 
    cmd = "ln -s $(location //foo_base:bar) [email protected]") 
+0

質問は、これは、これは 'bar.tar'意志のタイムスタンプので、問題になるかどうか、より多くのプラットフォームに依存しないと_b_を行うことができるかどうか、_a_です常に '// foo_base:bar'にマッチします。 – abergmeier

+0

ファイルをコピーするだけで、おそらくクロスプラットフォームにする唯一の簡単な方法です。しかし、あなたがタイムスタンプを心配しているならば、ファイルをコピーするのが悪くなります。タイムスタンプは常に異なっています。私は最も簡単なことは、タイムスタンプに依存しないことだと思います。 –

+0

タイムスタンプは関係ありません。 Bazelは '// foo_base:bar'が変更されたかどうかを検出し、必要に応じて' make_bar_tar'を再ビルドし、次のビルドで 'bar.tar'を再構築します。 –

関連する問題