我们正在将CMake项目迁移到Bazel。我们在CMake项目中有几个标有SYSTEM的仅标头库,以禁止显示某些警告。将这些迁移到Bazel时,我们可以通过以下方式进行这项工作
cc_library(
name = "lib",
srcs = ["include/header1.h", ...],
includes = ["include"],
)
这有效,但是按照Bazel C++ documentation,建议不要在srcs
中包含接口/公共头。这些应该是hdrs
的一部分。将这些添加到标头不起作用,因为它使用基于常规-I
的包含而不是-isystem
。
尽管bazel不建议这样做,但这样做是否还行呢?如果没有,那么正确的方法是什么?
编辑:
经过一番挖掘之后,在textual_hdrs
上找到了cc_library
属性,并使用它似乎也可以使用。与将公共标头添加到srcs
相比,这似乎是一种更干净的方法。现在规则看起来像这样
cc_library(
name = "lib",
textual_hdrs = ["include/header1.h", ...],
includes = ["include"],
)
对于我们来说,这似乎是一个不错的解决方案,只是textual_hdrs上的文档不够清楚,无法表明其含义。
PS:我们真的不可能重构代码来解决警告,因为有许多类似这样的库,而这完全超出了迁移工作的范围。
答案 0 :(得分:1)
如果您确定strip_include_prefix为None(或未通过),则将其添加到hdrs
可以。我们有一个宏,它包装了cc_library实例,并且默认将strip_include_prefix设置为空字符串。有趣的是,这不会影响textual_hdrs
或srcs
,但会影响hdrs
总之,以下内容似乎工作正常
cc_library(
name = "lib",
hdrs = ["include/header1.h", ...],
includes = ["include"],
)