在bazel中创建仅系统头库的正确方法是什么
What is the correct way to create a system header only library in bazel?
我们正在将一个CMake项目迁移到Bazel。在CMake项目中,我们有几个仅表头的库被标记为SYSTEM,以抑制一些警告。当将这些迁移到Bazel时,我们能够做到这一点的方法是使用以下
cc_library(
name = "lib",
srcs = ["include/header1.h", ...],
includes = ["include"],
)
这是可行的,但根据Bazel C++文档,不建议在srcs
中使用接口/公共头。这些应该是hdrs
的一部分。将这些添加到头中是不起作用的,因为它使用了基于-I
的常规包含而不是-isystem
。
尽管巴泽尔不推荐我们这样做,但我们的方式很好吗?如果没有,正确的做法是什么?
编辑:经过一番挖掘,在cc_library
上找到了textual_hdrs
属性,并使用它似乎也有效。这似乎是一种比将公共头添加到srcs
更干净的方法。现在规则看起来像这个
cc_library(
name = "lib",
textual_hdrs = ["include/header1.h", ...],
includes = ["include"],
)
这对我们来说似乎是一个很好的解决方案,只是textual_hdrs上的文档不够清晰,无法表明这就是它的目的。
PS:我们真的不可能重构代码来修复警告,因为有很多这样的库,而且完全超出了迁移工作的范围。
事实证明,如果您确保strip_include_prefix为None(或未传递),则将其添加到hdrs
中是有效的。我们有一个宏正在封装cc_library实例,它将strip_include_prefix默认为空字符串。有趣的是,这不会影响textual_hdrs
或srcs
,但会影响hdrs
总之,以下似乎工作良好
cc_library(
name = "lib",
hdrs = ["include/header1.h", ...],
includes = ["include"],
)
相关文章:
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 实现无开销push_back的最佳方法是什么
- C++从另一个类访问公共静态向量的正确方法是什么
- 在 c++ 中拥有一组结构的正确方法是什么?
- 通过JNI传递数据数组的最快方法是什么
- 用常见虚拟函数实现的任意组合来实现派生类的正确方法是什么
- 使用不同的CRT将新的C++代码与旧的(二进制)组件隔离开来的最佳方法是什么
- 当无法使用模板和宏时,生成类型变体C++代码的最简单方法是什么?
- 在另一个类视图中添加最多2个图表的正确方法是什么
- 在C++中样板"冷/never_inline"错误处理技术的最佳方法是什么?
- 在 c++ 中对类中的 c 字符串动态数组进行排序的最佳方法是什么?
- 在C++中包含原型文件的正确方法是什么?
- 在 OpenCV C++ 中估计基本矩阵之前对相应点进行归一化的正确方法是什么?
- 在PostgreSQL中根据它们的ID选择大量行的最快方法是什么?
- 在OSX上使用CMake将Adobe的XMP工具包构建为共享库的最简单方法是什么?
- 将一系列整数放入类的最佳方法是什么?
- 从长整整转换为uint64_t的推荐方法是什么?
- 将此布尔值传递给此函数的最有效方法是什么?
- 通过比较C++中的行在 txt 文件中搜索的最简单方法是什么?