You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 08:52:10