为什么我在.bzl文件中使用“ local_repository”,然后告诉我未定义名称“ local_repository”?

时间:2019-08-28 14:06:25

标签: bazel

我想通过bazel建立使节,我在我的PC上手动下载了一些软件包,然后将http_archive更改为local_repository,但是它告诉我名称“ local_repository”未定义。 local_repository是否需要任何加载操作?

local_repository可以在WORKSPACE中使用,但不能在我的.bzl文件中使用

WORKSPACE:
workspace(name = "envoy")
load("//bazel:api_repositories.bzl", "envoy_api_dependencies")
envoy_api_dependencies()
load("//bazel:repositories.bzl", "GO_VERSION", "envoy_dependencies")
load("//bazel:cc_configure.bzl", "cc_configure")
envoy_dependencies()
`repositories.bzl`:
local_repository(
    name = "com_google_protobuf",
    path = "/home/user/com_google_protobuf",
)

2 个答案:

答案 0 :(得分:2)

local_repositoryworkspace rule,所以我认为它不在WORKSPACE文件之外。

如果您想从local_repository文件中调用.bzl,则可以在其中使用native定义一个函数,然后从WORKSPACE进行调用,例如:

# repositories.bzl
def deps():
  native.local_repository(
    name = "com_google_protobuf",
    path = "/home/user/com_google_protobuf",
  )
# WORKSPACE
load("//:repositories.bzl", "deps")

deps()

例如,我在grpc项目中已经看到了这种模式。

答案 1 :(得分:0)

.bzl文件中,您必须使用native.local_repository而不是local_repository

.bzl文件中的所有符号都应在Starlark中定义,但是local_repository是在Bazel中本地定义的特殊规则。