使用rules_foreign_cc+Bazel时gnumake_src缺失BUILD文件求助
解决Bazel + rules_foreign_cc引入gnumake_src时BUILD文件缺失的错误
这个错误的核心是你通过http_archive引入的@gnumake_src仓库没有对应的BUILD配置文件,而rules_foreign_cc//toolchains:make_tool需要依赖该仓库的构建目标。以下是具体解决方法:
方法一:在http_archive中直接指定BUILD配置
在你的WORKSPACE文件里,修改http_archive规则,添加build_file_content字段,手动定义make的构建规则:
http_archive( name = "gnumake_src", urls = ["你的内部镜像地址/make-4.4.tar.gz"], sha256 = "f0826e971936444523dd011b3075106059d71867b467201c2c3946cede92a19d", # make-4.4官方校验值 build_file_content = """ package(default_visibility = ["//visibility:public"]) cc_binary( name = "make", srcs = glob(["src/**/*.c", "*.c"]), hdrs = glob(["src/**/*.h", "*.h"]), defines = ["GNU_MAKE"], copts = [ "-DHAVE_CONFIG_H", "-I.", "-Isrc", "-DLOCALEDIR=\"/usr/share/locale\"", ], ) """, )
这里直接定义了cc_binary目标生成make可执行文件,适配rules_foreign_cc的依赖需求。
方法二:使用本地BUILD文件
如果你有预先写好的BUILD配置文件,可以用build_file字段指定路径:
http_archive( name = "gnumake_src", urls = ["你的内部镜像地址/make-4.4.tar.gz"], sha256 = "f0826e971936444523dd011b3075106059d71867b467201c2c3946cede92a19d", build_file = "//third_party/gnumake:BUILD", )
//third_party/gnumake:BUILD中的内容可参考方法一的build_file_content。
方法三:覆盖rules_foreign_cc的默认依赖
确保你的自定义gnumake_src仓库被rules_foreign_cc识别,在WORKSPACE中添加:
override_repository( name = "gnumake_src", repo = "gnumake_src", # 对应你http_archive定义的name )
完成配置后,先运行bazel build @gnumake_src//:make验证是否能成功编译make,再执行原构建命令即可。
内容的提问来源于stack exchange,提问作者Logan X.
相关产品推荐
相关产品推荐

