1

バックグラウンド

私は、clを使用してBazelでC ++をコンパイルするWindowsビルドを使用しています。

ファイルのサブセット:

third_party/icu/source/common/unicode/schriter.h
third_party/icu/source/common/unicode/utypes.h
third_party/icu/source/common/unicode/stringpiece.h
third_party/icu/source/common/stringpiece.cpp
third_party/icu/BUILD
a/a.cc
a/a.h
a/BUILD
b/cpp/src/strings/stringpiece.h
b/cpp/src/util/uri_utils.h
b/BUILD

schriter.h持ってい#include "unicode/utypes.h"ます。

uri_utils.hそしてb/cpp/src/strings/stringpiece.h両方がありclass StringPieceます。third_party/icu/source/common/unicode/stringpiece.hもっているclass U_COMMON_API StringPiece : public UMemory

a.cc以下を参照しStringPiece、以下を含みます。

#include "b/cpp/util/uri_utils.h"
#include "strings/stringpiece.h"
#include "third_party/icu/source/common/unicode/schriter.h"

a/BUILD:

cc_library(
    name = "a",
    srcs = ["a.cc"],
    hdrs = ["a.h"],
    deps = [
        "//third_party/icu:common",
        "//b:sdk_strings",
    ],
)

b/BUILD:

cc_library(
    name = "sdk_strings",
    srcs = [
        "cpp/util/uri_utils.cc",
        "cpp/src/strings/stringpiece.cc"
    ],
    hdrs = [
        "cpp/util/uri_utils.h",
        "cpp/src/strings/stringpiece.h",
    ],
    includes = ["cpp/src"],
)

third_party/icu/BUILD:

cc_library(
    name = "common",
    srcs = [
        "source/common/stringpiece.cpp",
        "source/stubdata/stubdata.c",
    ],
    hdrs = glob(["**/*.h"]),
)

問題

そのままでは、ビルドは次のようにthird_party/icu:common失敗します。 third_party/icu/source/stubdata/stubdata.c(20): fatal error C1083: Cannot open include file: 'unicode/utypes.h': No such file or directory

に追加copts = ["/Ithird_party/icu/source/common",],するthird_party/icu/BUILDと、icu:commonビルドされますが、ターゲットaは次のエラーで失敗します。
third_party/icu/source/common/unicode/schriter.h(21): fatal error C1083: Cannot open include file: 'unicode/utypes.h': No such file or directory

代わりに を追加するincludes = ["source/common",],と、icu:commonビルドされますが、ターゲットは次のようにa失敗します。

a/a.cc(168): error C2872: 'StringPiece': ambiguous symbol
b/cpp/util/uri_utils.h(24): note: could be 'StringPiece'
third_party\icu\source\common\unicode/stringpiece.h(52): note: or 'icu_54::StringPiece'

ソースは cmake を使用して正常にコンパイルされるため、ソースを変更する必要はありません。このビルドを正しく行うために BUILD ファイルを変更するにはどうすればよいですか? icuのすべてがのヘッダーにアクセスできるようにし、 に依存するターゲットにunicodeは公開しないようにするにはどうすればよいですか?unicode/stringpiece.hicu

4

1 に答える 1