我想通过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",
)
答案 0 :(得分:2)
local_repository
是workspace 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中本地定义的特殊规则。