【发布时间】:2018-09-13 00:21:39
【问题描述】:
我正在尝试根据运行 bazel 的操作系统指定构建条件,因此在我的 .bzl 脚本中,我有一个规则,该规则从外部源创建所有 simlink 并写入 BUILD 文件(使用 ctx.file) ,我在其中声明了所有导入和库,并且我想在其中添加选择函数。但是,当我构建时,我收到此错误消息:
ERROR: no such package '@maya_repo//': Traceback (most recent call last):
File "/var/tmp/doNotRemove/mdilena_plugins/MayaMathNodes/src/maya.bzl", line 149
ctx.file("BUILD", _BUILD_STRUC.format(maya_...))
File "/var/tmp/doNotRemove/mdilena_plugins/MayaMathNodes/src/maya.bzl", line 149, in ctx.file
_BUILD_STRUC.format(maya_dir = maya_dir)
Invalid character '[' inside replacement field
所以这是我的代码示例以及我想要实现的目标:
_BUILD_STRUC = \
"""
# Windows imports
cc_import(
name = "Foundation-win",
interface_library = "{maya_dir}/lib/Foundation.lib",
shared_library = "{maya_dir}/bin/Foundation.dll",
)
cc_import(
name = "OpenMaya-win",
interface_library = "{maya_dir}/lib/OpenMaya.lib",
shared_library = "{maya_dir}/bin/OpenMaya.dll",
)
# Linux imports
cc_import(
name = "Foundation-lnx",
shared_library = "{maya_dir}/bin/Foundation.so",
)
cc_import(
name = "OpenMaya-lnx",
shared_library = "{maya_dir}/bin/OpenMaya.so",
)
cc_library(
name = "Foundation",
deps = select({
"@bazel_tools//src/conditions:windows": [":Foundation-win"],
"//conditions:default": [":Foundation-lnx"],
}),
includes = ["{maya_dir}/include"],
visibility = ["//visibility:public"],
)
cc_library(
name = "OpenMaya",
deps = select({
"@bazel_tools//src/conditions:windows": [":OpenMaya-win"],
"//conditions:default": [":OpenMaya-lnx"],
}),
includes = ["{maya_dir}/include"],
visibility = ["//visibility:public"],
)
"""
def _impl(ctx):
maya_src = ctx.os.environ["MAYA_LOCATION"]
maya_ver = ctx.os.environ["MAYA_VERSION"]
maya_dir = "maya{}".format(maya_ver)
ctx.symlink(maya_src, maya_dir)
ctx.file("BUILD", _BUILD_STRUC.format(maya_dir=maya_dir))
link_maya = repository_rule(
implementation = _impl,
local = True,
environ = ["MAYA_LOCATION"],
)
有人知道为什么会这样吗?我查看了select 和configurable attributes 文档,似乎这就是使用它的方法;我想知道是我做错了什么还是某个地方有错误。
感谢您的帮助!
编辑:
看起来 Bazel 真的不喜欢在 ctx.file 中使用 select, 我会留下这个问题,以防有人能够摆脱一些 点亮它。与此同时,我通过制作所有
cc_imports来解决它 并包括来自链接回购的公开,同时保留所有cc_libraries和select到我插件的 BUILD 文件中;从那里我 能够使用条件和一切构建。
【问题讨论】:
标签: bazel