处理多个平台的实现
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
,同时依赖 base
和 base_mac
,并从 base
中删除 hdrs
] 和 base_mac
我正在尝试构建一个 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
,同时依赖base
和base_mac
,并从base
中删除hdrs
] 和base_mac