我有一个C++ Bazel项目,其中每个目标都应根据其父目标接收不同的编译器标志(通过copts
)。例如,考虑依赖图:
我希望在copts
和target 1
中定义的不同target 2
分别向下传播到每个dependency
目标。换句话说,我希望每个dependency
目标接收其父目标中定义的copts
。这意味着将通过编译每个dependency
目标产生两个不同的编译二进制文件,具体取决于哪个父目标取决于它。
Bazel有可能吗?如果没有,是否有其他方法可以达到相同的结果?
最佳答案
最简单的方法是显式复制所有依赖关系目标。您可以避免使用macro在BUILD
文件中进行不必要的重复。然后,当您要构建或依赖其中之一时,只需选择要使用的版本,因为它们的名称不同。
更复杂的方法为您提供了不同的方式来选择要使用的Dependency A
版本。如果dependency
目标是二进制文件(例如),那么在更复杂的方法中我看不到任何优势。
如果它们是整个依赖关系图的中间库,那么user-defined build setting可能更有意义。这将自动复制所有中间目标,而无需修改所有其他规则定义以使用复制它们的宏。然后,您可以将use select设置为Target 1
和Target 2
之间,并使用匹配的copts
。
变得更加复杂的是,您可以使用aspects或完全使用custom C++ rules,但是我看不出有任何理由要使用这两种方法。
关于c++ - 将拷贝传播到Bazel中的所有依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64186487/