c++ - 将拷贝传播到Bazel中的所有依赖项

标签 c++ bazel

我有一个C++ Bazel项目,其中每个目标都应根据其父目标接收不同的编译器标志(通过copts)。例如,考虑依赖图:
enter image description here
我希望在coptstarget 1中定义的不同target 2分别向下传播到每个dependency目标。换句话说,我希望每个dependency目标接收其父目标中定义的copts。这意味着将通过编译每个dependency目标产生两个不同的编译二进制文件,具体取决于哪个父目标取决于它。
Bazel有可能吗?如果没有,是否有其他方法可以达到相同的结果?

最佳答案

最简单的方法是显式复制所有依赖关系目标。您可以避免使用macroBUILD文件中进行不必要的重复。然后,当您要构建或依赖其中之一时,只需选择要使用的版本,因为它们的名称不同。
更复杂的方法为您提供了不同的方式来选择要使用的Dependency A版本。如果dependency目标是二进制文件(例如),那么在更复杂的方法中我看不到任何优势。
如果它们是整个依赖关系图的中间库,那么user-defined build setting可能更有意义。这将自动复制所有中间目标,而无需修改所有其他规则定义以使用复制它们的宏。然后,您可以将use select设置为Target 1Target 2之间,并使用匹配的copts
变得更加复杂的是,您可以使用aspects或完全使用custom C++ rules,但是我看不出有任何理由要使用这两种方法。

关于c++ - 将拷贝传播到Bazel中的所有依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64186487/

相关文章:

c++ - 由 C++ 字符串类定义的字符串文字是否属于 const char[] 类型

c++ - dup 竞赛后的 pwrite 安全吗?

c++ - 空终止 int 数组

bazel 构建带有后缀的通配符

c++ - 升级 Visual Studio 后 Bazel 不再工作

tensorflow - 从源代码构建TensorFlow时-c opt和--config = opt有什么区别?

c++ - libDAI 编译错误

c++ - 如何在顶点着色器中使用 VBO 数据作为位置数据,在片段着色器中使用统一数据作为颜色数据

c++ - 加载 Bazel 扩展失败

Bazel 一次构建多个目标