2

ライブラリのすべての .proto ファイルを 1 つのラベルに含めるファイル グループ ルールを作成しました。

filegroup(
    name = "protos_all_src",
    srcs = glob(
        ["**/*.proto"],
        exclude = [
            "protobuf/worker.proto",
            "protobuf/worker_service.proto",
            "protobuf/master.proto",
            "protobuf/master_service.proto",
        ],
    )  
)

tf_proto_library(
    name = "protos_all",
    srcs = ":protos_all_src",
    ),
...
)

しかし奇妙なことに、この形式では、この他のルールは失敗します:

cc_library(
    name = "lib_internal",
    srcs = glob(
        [
            "lib/**/*.h",
            "lib/**/*.cc",
            "platform/*.h",
            "platform/*.cc",
        ] + tf_additional_lib_srcs(),
        exclude = [
            "**/*test*",
            "platform/**/cuda.h",
            "platform/**/stream_executor.h",
        ],
    ),
    hdrs = [
        "lib/core/blocking_counter.h",
        "lib/core/refcount.h",
        "lib/gtl/edit_distance.h",
        "lib/gtl/int_type.h",
        "lib/gtl/iterator_range.h",
        "lib/gtl/manual_constructor.h",
        "lib/gtl/top_n.h",
        "lib/io/iterator.h",
        "lib/io/match.h",
        "lib/jpeg/jpeg_handle.h",
        "lib/png/png_io.h",
        "lib/random/random.h",
        "lib/random/random_distributions.h",
        "lib/random/weighted_picker.h",
        "lib/strings/ordered_code.h",
        "lib/strings/proto_text_util.h",
        "lib/strings/regexp.h",
        "lib/strings/scanner.h",
        "lib/wav/wav_io.h",
        "platform/demangle.h",
        "platform/denormal.h",
        "platform/platform.h",
        "platform/tensor_coding.h",
        "platform/tracing.h",
    ],
    copts = tf_copts(),
    linkopts = ["-ldl"],
    deps = [
        ":protos_all_cc",
        "//tensorflow/core/platform/default/build_config:platformlib",
        "//third_party/eigen3",
    ],
)

dep として protos_all_cc ルールに注意してください。

元に戻せば

tf_proto_library(
    name = "protos_all",
    srcs = glob(
        ["**/*.proto"],
        exclude = [
            "protobuf/worker.proto",
            "protobuf/worker_service.proto",
            "protobuf/master.proto",
            "protobuf/master_service.proto",
        ],
    ),

すべて正常に動作します。

最初の形式と 2 番目の形式は完全に等しいと思います。私が欠けているものは何ですか?

編集:ここtf_proto_libraryで定義されています:

https://github.com/tensorflow/tensorflow/blob/master/tensorflow/core/platform/default/build_config.bzl#L26

は次のようcc_proto_libraryに定義されています。

https://github.com/google/protobuf/blob/master/protobuf.bzl#L109

ベゼルバージョン:

Build label: 0.2.3-homebrew
Build target: bazel-out/local-fastbuild/bin/src/main/java/com/google/devtools/build/lib/bazel/BazelServer_deploy.jar
Build time: Tue May 17 15:07:52 2016 (1463497672)
Build timestamp: 1463497672
Build timestamp as int: 1463497672
4

2 に答える 2

1

実際のコードと表示されているエラー メッセージを貼り付けていただけますか? いくつかの問題があるようで、どれがコピー アンド ペースト エラーでどれがコードかわかりません。

あなたが抱えている問題はdeps、cc_library ルールのようにファイル (またはファイル グループ) を一覧表示できず、それがファイル グループであることだと思います":protos_all_cc"deps他の cc_libraries である必要があります (「このルールが一緒にリンクする必要があるもの」です)。しかし、エラー メッセージや protos_all_cc の定義がなければ、判断するのは非常に困難です。

于 2016-07-13T15:10:21.913 に答える
0

srcs属性はリストでなければならないので、あなたの定義protos_all

tf_proto_library(
    name = "protos_all",
    srcs = [":protos_all_src"], # note the list here
    ...
)

多分これは質問のタイプミスであり、本当の問題は別のものですか?あなたのアプローチPermission deniedを試すと、奇妙な問題が発生します。filegroup

于 2016-07-13T13:18:13.460 に答える