Bazel跨仓库依赖cc_library构建失败:无法找到uart.h头文件
解决跨Bazel仓库依赖cc_library时头文件找不到的问题
问题核心
跨仓库依赖repA:uart时,编译repB的hello_world目标出现uart.h找不到的错误,本质是Bazel不会自动将依赖仓库的根目录加入编译include路径,同时独立仓库的依赖路径写法也需要调整。
解决方案
1. 处理独立仓库的关联(若repA和repB是独立Bazel仓库)
如果两个仓库各自有WORKSPACE文件,需在repB的WORKSPACE中引入repA:
local_repository( name = "repA", path = "/实际路径/repA", # 替换为repA的本地绝对/相对路径 )
同时修改repB的BUILD文件中hello_world的依赖路径:
cc_library( name = "hello_world", srcs = ["hello_world.c"], hdrs = ["hello_world.h"], deps = [ "@repA//:uart", # 用@repA引用外部仓库目标 ], )
2. 修复头文件引用问题(二选一即可)
方式一:修改代码中的头文件引用路径
在repB/hello_world.c中,将#include "uart.h"改为:
#include "repA/uart.h"
Bazel会将工作空间根目录作为默认include路径,该写法可直接定位到repA下的头文件。
方式二:在repA的cc_library中配置include路径
修改repA的BUILD文件,给uart库添加includes属性,让依赖它的目标能直接引用头文件名:
package(default_visibility = ["//visibility:public"]) cc_library( name = "uart", srcs = ["uart.c"], hdrs = ["uart.h"], includes = ["."], # 将repA根目录加入依赖目标的include路径 )
验证构建
完成修改后,在repB目录执行以下命令即可正常编译:
bazel build //:main
内容的提问来源于stack exchange,提问作者Pavel Permyakov
相关产品推荐
相关产品推荐

