gpt4 book ai didi

c++ - 如何处理 Bazel 中的 C++ 库循环依赖?

转载 作者:搜寻专家 更新时间:2023-10-31 02:10:23 81 4
gpt4 key购买 nike

Bazel 是否具有类似于 gcc -( archives -) 或 --start-group archives --end-group link 的功能?处理库之间的循环依赖?

或者,Bazel 是否具有我们可以在 Bazel 中使用此 gcc 功能的功能?例如,使用 CCFLAGS 之类的东西?

最佳答案

许多人认为,最好首先避免循环依赖。

假设您有两个文件,其中 a.cc #includes b.hb.cc #includes a.h:

cc_library(
name="a",
srcs=["a.cc"],
hdrs=["a.h"],
deps=[":b"], # a.cc #includes b.h
)

cc_library(
name="b",
srcs=["b.cc"],
hdrs=["b.h"],
deps=[":a"], # b.cc #includes a.h
)

bazel 会提示循环依赖。

如果您拥有所有有问题的代码,避免这些循环依赖的更直接的方法是重新调整您的源代码和 bazel 包,以首先避免依赖。

这里的一个策略是将常见的东西重构到第三个“核心”库 c 中,它既不依赖于 a 也不依赖于 b :

cc_library(
name="a",
srcs=["a.cc"],
hdrs=["a.h"],
deps=[":c"], # a.cc #includes c.h
)

cc_library(
name="b",
srcs=["b.cc"],
hdrs=["b.h"],
deps=[":c"], # b.cc #includes c.h
)

cc_library(
name="c",
srcs=["c.cc"],
hdrs=["c.h"],
)

另一种策略是采用某种构建步骤将 a.hb.h 复制到某个“公共(public) header ”文件夹(它本身不依赖于任何其他内容) .这消除了文件级循环依赖,但在语义上,源代码在 ab 之间仍然存在循环依赖。

关于c++ - 如何处理 Bazel 中的 C++ 库循环依赖?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45353395/

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