首页 > 解决方案 > Bazel 可以使用多个 WORKSPACE 文件吗?

问题描述

假设我正在使用特定的CROSSTOOL+ 工具链,例如this one,并且我想使用该工具链编译第 3 方库,例如abseil。是否可以在不修改 3rd 方库的情况下这样做WORKSPACE

如果我必须修改工作区,local_repository()为工具链存储库添加规则似乎足够合理。但在这种情况下,除非我还从工具链工作区复制new_http_archive() 条目(它会拉入实际的工具链二进制文件),否则我无法让它工作。需要添加 local_repository 的依赖项对我来说似乎很奇怪 - 他们不应该被拉进来吗?

我可以对工具链 repo 进行更改,但希望不必修补或以其他方式修改 3rd 方包。更改编译器似乎不需要修改要构建的包。

标签: bazeltoolchainabseil

解决方案


需要添加 local_repository 的依赖项对我来说似乎很奇怪 - 他们不应该被拉进来吗?

不幸的是,WORKSPACE 文件不是递归的,所以传递依赖不会被自动引入。使用宏引入依赖项的依赖项是一种常见模式,例如go_rules_dependencies()in rules_go。管理外部存储库的 Bazel 子团队在此处有一个解决此问题的路线图条目。


推荐阅读