Bazel 平台特定的 C++ 定义

syv*_*vex 3 c++ bazel

应该如何在 bazel 中包含特定于平台的标志?

假设我们有一个跨平台库,我们想要更改其定义。

我们可以做这样的事情:

defines = ["FEATURE_A"]
if somehow_detect_the_platform == 'ios':
    defines.extend("FEATURE_B")

cc_library(
    name = "foo",
    srcs = ["foo.cc"],
    defines = defines,
    hdrs = ["foo.h"],
)
Run Code Online (Sandbox Code Playgroud)

另请注意,此概念可以应用于其他内容,例如包含、cflags、源、标头等。

hlo*_*pko 5

有 2 个选项。首先是使用选择功能。通过 select,您可以根据当前配置有条件地设置属性的值。

第二个选项是调整CROSSTOOL配置文件,添加一个特定功能,该功能会根据工具链发出不同的标志。然后您可以在 cc_library 的features属性中启用该功能。

第一个选项更简单,第二个选项更健壮且更封装。