Bazel是否具有类似于gcc - (archives - )或--start-group archives --end-group link的功能来处理库之间的循环依赖关系?
或者,Bazel有一个功能,我们可以在Bazel中使用这个gcc功能吗?例如,使用像CCFLAGS?
这样的东西答案 0 :(得分:2)
许多人认为最好首先避免循环依赖。
假设您有两个文件,其中>>> super(ClsTwo,entity).__init__()
Here's One
>>> super(ClsThree,entity).__init__()
Here's Two
Here's Threee
>>> super(ClsThreee,entity).__init__()
Here's Two
>>> super(ClsFour,entity).__init__()
Here's Three
#includes a.cc
和b.h
#includes b.cc
:
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.h
复制到某些“公共标题”文件夹(它本身不依赖于任何其他内容)。这将删除文件级循环依赖关系,但从语义上讲,源代码仍然具有b.h
和a
之间的循环依赖关系。
答案 1 :(得分:0)
如果您不拥有这些库,则必须等到https://gist.github.com/sfrehse/02c7d57fad862c71c20f07c59caba240实施。另请参阅cc_import-kind-of-rule。我不知道同时解决方法。