Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bazel 如何在工作区中引用环境变量?_Bazel - Fatal编程技术网

Bazel 如何在工作区中引用环境变量?

Bazel 如何在工作区中引用环境变量?,bazel,Bazel,如果项目对本地安装的软件具有外部依赖性,并且由于许可或大小问题无法下载,无法使用new\u http\u archive或new\u git\u repository进行管理,有没有办法让new\u local\u repository使用环境变量指定路径 看看上面的例子,看起来这个问题在某种程度上得到了解决。但是我找不到任何关于如何做的文档。bazel中的首选方法是将工具也放在源代码存储库中,因为这是获得可复制构建的唯一方法 然而,我认为和 我还没有测试过,但我认为规则看起来像这个专用工具。b

如果项目对本地安装的软件具有外部依赖性,并且由于许可或大小问题无法下载,无法使用
new\u http\u archive
new\u git\u repository
进行管理,有没有办法让
new\u local\u repository
使用环境变量指定路径


看看上面的例子,看起来这个问题在某种程度上得到了解决。但是我找不到任何关于如何做的文档。

bazel中的首选方法是将工具也放在源代码存储库中,因为这是获得可复制构建的唯一方法

然而,我认为和

我还没有测试过,但我认为规则看起来像这个
专用工具。bzl

def _proprietary_tool_impl(ctx):
    env = ctx.configuration.default_shell_env
    ctx.actions.run(
      inputs=ctx.attr.srcs,
      outputs=ctx.attr.out,
      executable=env['PROPRIETARY_TOOL_PATH'] + "/bin/tool",
    )

proprietary_tool = rule(
    implementation=_proprietary_tool_impl,
    attrs={}, # Add attributes needed by the proprietary tool
)
从对746号问题的评论来看,这似乎在某种程度上得到了解决。但是我找不到任何关于如何做的文档

感谢您检查现有的bug!不过,这只虫子已经快2岁了。从那时起,巴泽尔已经改变了很多

对于这个问题,我认为您应该在
.bzl
文件中编写自己的存储库规则

允许存储库规则执行非密封操作、读取环境、查看整个文件系统等。正常的构建规则不允许,它们也无权访问环境或整个文件系统

您的存储库规则应该检查envvar的值,并编写一个
BUILD
文件,Bazel将在您的规则创建的外部存储库中使用该文件


以我的回答为例:

似乎是专门针对android SDK的。这可能是重点,但它也引用了一个更通用的解决方案。对于希望选择性地与专有、许可的第三方软件集成的开源项目,将工具包括在源代码库中肯定不是一个可行的解决方案。我能让它工作。我认为这可能是更好的方法,因为它有一个
environ
参数,可以用来表示对环境变量的依赖关系。