gpt4 book ai didi

c++ - 在 Bazel 中,如何防止某些 C++ 编译器标志传递给外部依赖项?

转载 作者:行者123 更新时间:2023-12-01 14:24:49 25 4
gpt4 key购买 nike

我们的项目是用 C++ 编写的,并使用 gRPC 作为依赖项。我们使用 clang 作为编译器。我们使用 -Wall -Werror 设置 C++ 工具链文件,但这会导致 gRPC 本身引发的警告出现问题。
有没有办法阻止 Bazel 应用 Werror标记到 gRPC 文件,但仍将其应用于项目的其他地方?
文件如下所示:

WORKSPACE:
git_repository(
name = "com_github_grpc_grpc",
remote = "https://github.com/grpc/grpc",
...
)
load("@com_github_grpc_grpc//bazel:grpc_deps.bzl", "grpc_deps")
grpc_deps()
load("@com_github_grpc_grpc//bazel:grpc_extra_deps.bzl", "grpc_extra_deps")
grpc_extra_deps()
...


BUILD:
cc_binary(
name = "one_of_many_binaries",
srcs = ["source_1.cc"],
deps = ["@com_github_grpc_grpc//:grpc++",
...],
)
...


cc_toolchain_config.bzl:
default_compile_flags_feature = feature(
name = "default_compile_flags",
enabled = True,
flag_sets = [
flag_set(
actions = all_compile_actions,
flag_groups = [
flag_group(
flags = ["-Wall", "-Werror", ...]
....


2020 年 9 月 2 日更新
基于 Ondrej 的帮助解决方案,我通过以下方式解决了这个问题。
  • 删除 -Werror标志从我拥有它的功能(以及其他标志)到一个新功能,默认情况下禁用,如下所示:
  • compile_flags_with_werror = feature(
    name = "compile_flags_with_werror",
    enabled = False, #this is important
    flag_sets = [
    flag_set(
    actions = all_compile_actions,
    flag_groups = [
    flag_group(
    flags = ["-Werror"]
    然后,在我自己的项目中每个 BUILD 文件的顶部,添加以下行: package(features = ["compile_flags_with_werror"])这具有应用 -Werror 的效果在我的项目中编译文件时,而不是在编译任何外部依赖项时。

    最佳答案

    您可以定义工具链功能,例如:

    warning_flags_feature = feature(
    name = "warning_flags",
    enabled = True,
    flag_sets = [
    flag_set(
    actions = all_compile_actions,
    flag_groups = [
    flag_group(
    flags = [
    "-Wall",
    "-Werror",
    ],
    ),
    ],
    ),
    ],
    )
    这是 enabled默认添加到 featurescreate_cc_toolchain_config_info()添加所需的标志(从您的 default_compile_flags_feature 中删除它们)。
    然后对于行为不端的外部依赖项,您可以在其 BUILD 中禁用整个包的功能。文件:
    package(features = ["-warning_flags"])
    或者按目标执行此操作:
    cc_library(
    name = "external_lib",
    ...
    features = ["-warning_flags"],
    )

    关于c++ - 在 Bazel 中,如何防止某些 C++ 编译器标志传递给外部依赖项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63588902/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com