遵循Bazel C++工具链教程时为何提示rule等全局符号未定义
问题原因
你使用的Bazel 4.1.0属于旧版本,cc_common、rule、CcToolchainConfigInfo这三个符号并非默认全局可用,必须显式加载对应定义才能使用。
解决步骤
- 首先在你编写工具链配置的
.bzl文件最顶部添加如下加载语句:
# 加载C++工具链相关符号 load("@bazel_tools//tools/cpp:cc_toolchain_config_lib.bzl", "CcToolchainConfigInfo", "cc_common") # 加载rule定义 load("@bazel_skylib//lib:rules.bzl", "rule")
- 如果构建时提示找不到
@bazel_skylib依赖,需要在项目的WORKSPACE文件中添加如下配置引入依赖:
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") http_archive( name = "bazel_skylib", sha256 = "c6966ec828da198c5d9adbaa94c05e3a1c7f21bd0a3f0244b6934e43bcafeda6", urls = [ "https://mirror.bazel.build/github.com/bazelbuild/bazel-skylib/releases/download/1.2.1/bazel-skylib-1.2.1.tar.gz", "https://github.com/bazelbuild/bazel-skylib/releases/download/1.2.1/bazel-skylib-1.2.1.tar.gz", ], ) load("@bazel_skylib//:workspace.bzl", "bazel_skylib_workspace") bazel_skylib_workspace()
- 重新执行构建命令即可正常运行。
内容的提问来源于stack exchange,提问作者Andreas
相关产品推荐
相关产品推荐

