处理多个平台的实现

Dealing with implementations for several platforms

我正在尝试构建一个 cross-platform 库,它使用多个平台的 API。我现在正在使用 macOS,但遇到了问题,因为我需要使用 objective-c.

我有这个:

cc_library(
    name = "base",
    hdrs = ["application.h"],
    deps = [":base_mac"],
    visibility = ["//visibility:public"],
)

objc_library(
    name = "base_mac",
    srcs = ["application_mac.mm"],
)

在其他包中,我依赖于 base

问题是 application_mac.mm 包含 application.h 并实现了它,但它没有编译,因为 base_mac 规则不依赖于 base 规则并且无法使用其 headers。添加此依赖项也不起作用,因为我们有一个依赖循环,而 bazel 不喜欢它。

那么,我该如何最好地解决这个问题?

两种解决方案:

  • 也可以将 hdrs = ["application.h"] 添加到 base_mac,或者
  • 创建另一个仅包含 hdrs = ["application.h"]cc_library,同时依赖 basebase_mac,并从 base 中删除 hdrs ] 和 base_mac