首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何将工作空间路径传递给bazel规则

在Bazel中,可以通过使用--workspace_status_command标志来将工作空间路径传递给规则。这个标志允许我们执行一个命令来生成一个包含工作空间信息的文件,然后将该文件的路径传递给规则。

以下是一种可能的实现方式:

  1. 创建一个脚本文件,例如workspace_status.sh,并将其放置在工作空间的根目录下。
  2. 在脚本文件中,使用适当的命令来获取工作空间路径,并将其写入一个文件中。例如,可以使用pwd命令来获取当前目录的绝对路径,并将其写入一个名为WORKSPACE的文件中。
  3. 在Bazel的构建文件(例如BUILDWORKSPACE文件)中,使用--workspace_status_command标志来指定脚本文件的路径。例如:
代码语言:txt
复制
bazel build --workspace_status_command=//workspace_status.sh //path/to/target

这样,当执行构建命令时,Bazel会先执行workspace_status.sh脚本,生成包含工作空间路径的文件,并将该文件的路径传递给规则。

请注意,这只是一种实现方式,具体的实现方式可能因工作环境和需求而有所不同。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

扩展 Bazel 的构建语言

本篇介绍何使用宏和规则扩展 Bazel 的构建语言。 在学习更高级的概念之前,先了解以下几个知识点: 了解 BUILD 和 .bzl 文件中使用的 Starlark 语言。...Starlark 语言 参考 https://www.backendcloud.cn/2022/07/01/bazel-starlark/ 宏和规则(Macros and rules) 宏是实例化规则的函数...规则比宏更强大。它可以访问 Bazel 内部信息,并完全掌控将要处理的内容。例如,它可以将信息传递给其他规则。 如果您想重复使用简单的逻辑,请从宏开始。如果宏变得复杂,通常最好使其成为规则。...规则适用于高级用户,大多数用户永远都不需要编写规则;它们只会加载和调用现有规则。 BUILD 的三个阶段 加载阶段。规则实例化,将其添加到图表中。 分析阶段。...路径下生成了个小号的图片 上面的代码放在: https://github.com/backendcloud/example/blob/master/bazel-extension-demo 官方的example

1.7K10
  • 自定义规则实现将多个静态库合并为一个动态库或静态库

    :生成动/静态库 cc_proto_library :从 .proto 文件生成 C++ 代码 fdo_prefetch_hints :表示位于工作区中或位于指定绝对路径的 FDO 预取提示配置文件...fdo_profile :表示工作区中或位于指定绝对路径的 FDO 配置文件 cc_test :测试 C/C++ 样例 cc_toolchain :表示一个 C++ 工具链 cc_toolchain_suite...在编写规则中我们就需要获取当前的编译器,我们不能直接使用固定的路径,比如 Linux 下 /usr/bin/gcc,因为可能是交叉编译器,路径就不一样了。...另外我们还需要传入 gcc 将多个静态库合并成一个动态库的相关参数、待合成的静态库列表、最后要生成的动态库名称和路径。这样就是一个比较完善的自定义规则了。...2 自定义规则实现 2.1 规则功能 将多个静态库合并成一个动态库 将多个静态库合并成一个静态库 可以设置生成库的名称和生成路径 静态库作为规则依赖 2.2 实现规则的理论基础 将多个静态库合并成一个动态库

    5.2K20

    百度Apollo源码学习之Bazel编译介绍

    (怪不得看起来很像Android.bp语法 O(∩_∩)O) Google认为直接用Makefile构建软件速度太慢,结果不可靠,所以构建了一个新的工具叫做BazelBazel规则层级更高。...image.png 开始使用 Bazel的编译是基于工作区(workspace)的概念。...每个工作空间目录都有一个名为的文本文件WORKSPACE,该文件可以为空,或者可以包含 对构建输出所需的外部依赖项的引用。 包含名为的文件 WORKSPACE的目录被视为工作空间的根。...因此,Bazel会忽略工作空间中的任何目录树,这些工作树植根于包含WORKSPACE文件的子目录(因为它们形成另一个工作空间)。...BUILD文件 BUILD文件中包含了多个不同类型的bazel指令。 其中最重要的是编译规则(build rule),它告诉bazel怎么编译目标输出,是一个执行文件还是一个库。

    3.3K40

    如何挖掘 Bazel 的极致性能

    Bazel 官方定义了一些规则 (rule),用于构建某些特定产物,例如 c++ 的 library 或者 go 语言的 package,用户配置和调用这些规则。...他仅仅需要告诉 Bazel 要构建什么 Artifact,而由 Bazel 来决定如何构建它。 规则由官方和可信赖第三方维护,规则产生的任务,满足封闭性需求,这使得用户可以信赖系统的增量构建能力。...当用户第二次发起构建时,Bazel 会检测工作空间的哪些文件发生了改变,并更新 ActionGraph。如果没有文件改变,就会直接复用上一次的 ActionGraph 进行分析。...为保证 CAS 的存储空间被有效利用,通常会使用 LRU 算法管理 CAS 里存储的 Blob,当存储空间写满时,最久没被访问的 Blob 就会被自动淘汰,这样就保证了空间里的 Blob 是最活跃的。...除此之外,针对工作空间的完整 ActionGraph 的内存缓存机制 (skyframe),使得 Bazel 对大型项目拥有秒级的构建速度,这也是其他主流构建系统远远达不到的。

    65920

    Angular8稳定版修改概述

    但这是如何工作的? 基本上,Angular将使用polyfill构建其他文件,并且它们将注入nomodule 属性。...您可以参考Bazel文档,并了解如何将其与Angular一起使用。 你可能想知道:“Bazel准备好了吗?”简答:还没有。目前,它处于“选择预览”模式。...您可以使用以下命令添加Bazel支持: ng add @ angular / bazel 或者,您也可以使用Bazel创建一个新的应用程序: npm install -g @ angular / bazel...基本上,构建器只是一个带有一组命令的函数,您可以createBuilder()从@angular-devkit/architect包传递给方法。...阅读Angular Doc上有关服务工作者的更多信息。 表单改进 添加了markAllAsTouched方法以标记所有的控件FormGroupas as touched。

    4.5K20

    Istio实战系列-Envoy Proxy构建分析

    编译工具 Envoy采用了Bazel进行构建。 Bazel是一种高层构建语言,类似Make,Maven和Gradle。...Bazel定义构建的依赖关系和规则,并管理构建生成的临时文件及二进制文件,具体的编译工作是调用各个语言的编译工具如GCC, JAVAC等完成的。...每个工作空间中有一个WORKSPACE文件,该文件用于描述该工作空间的外部依赖,例如依赖的Github上的第三方代码。...target是一个构建规则(build rule)的实例,一般包含构建所需的源文件,构建目标的名称。rule还可以嵌套,一个rule的输出文件可以作为另一个rule的输入文件。...编译Envoy 首先参考Bazel的官方文档安装Bazel,并且需要安装gcc等相关工具。

    1.7K10

    手把手:我的深度学习模型训练好了,然后要做啥?

    在本地运行分类 把分类器放到硬编码(hardcoded)的代理 把分类器放到有服务发现(service discovery)的代理 用一个伪DNS调用分类器 机器学习的实际应用 当我们第一次进入Hive的机器学习空间时...现在,tensorflow已经将模型信息保存到/tmp/output_graph.pb和/tmp/output_labels.txt中,这些作为命令行参数传递给label_image.py脚本。...如果你没有听说Flask,简单解释一下,Flask是一个非常轻量级的Python Web框架,它允许你以最少的工作启动一个http api服务器。...速度瓶颈可能还是在实际的计算工作中,所以升级Flask包装代码没有太多的意义。现在,也许这个代码足以处理你的负载。...如何将机器学习代码从Matlab中迁移出来。 o 在生产阶段不要用Matlab GPU驱动,Cuda,CUDNN o 使用nvidia-docker,试试其它的在线Dockfiles。

    1.6K20

    自定义工具链

    Bazel 还必须淘汰旧的 APIs。这不是很容易就完成的任务,因为项目的所有语言、工具链、依赖项和 select() 都必须支持新的 APIs。这需要一个有序的迁移顺序来保持项目正常工作。...Bazel 的 C++ 相关规则已经支持平台,而 Android 相关规则不支持。你的 C++ 项目可能不关心 Android,但其他人可能会。...“注:这里 Host 平台只是平台扮演一个角色的阐述,跟实际编写 Bazel 规则没有关系。toolchain 规则里也只有对执行平台和目标平台的约束设置。...3.1.2 定义约束和平台 平台的可能选择空间是通过使用构建文件中的 constraint_setting 和 constraint_value 规则定义的。...任何定义工具链的人都需要声明一个 toolchain_type 目标,这是一个字符串标识,用来标志工具链类别,以避免在加载了多个语言规则工作区中出现潜在的冲突。

    4.7K31

    拥有此神技,脚本调试从此与 echo、set、test 说分手!

    例如,我们在脚本中使用了 Bazel 这个构建工具。我们必须提前安装并配置好 Bazel,而且不要忘记为了能够正常使用 Bazel 还得需要一个支持使用 Bazel 构建的工程。...如果说我们就是想知道这个命令搭配上这些选项参数是否能按我们预期的那样工作呢?很简单,那就单独在命令行里面去执行一下。如果在命令行中也不能按预期的工作,放到 Bash 脚本里面也一样不会按预期的工作。...由于操作系统和 Bash 的一些限制,Bach Testing Framework 无法做到: 拦截使用绝对路径调用的命令 事实上我们应该避免在 Bash 脚本中使用绝对路径,如果不可避免的要使用,我们可以把这个绝对路径抽取为一个变量...然后我们就可以执行真正的命令了,将find命令的输出结果传递给xargs命令,并组合到rm -rf命令之后。...现在这个这个 cleanup 的实现里面没有使用双引号,但是参的时候使用了双引号,那是否还会按照我们的预期来执行呢?

    1K20

    云原生安全全攻略

    在容器的创建过程中,Docker守护程序首先在系统底层创建命名空间(Linux Namespace)。...(3)Bazel Bazel是一个功能强大的多语言编译器,可以编译Java、C++、Android、iOS、Golang应用程序,同样也支持容器镜像的编译构建。...使用Bazel分为两个步骤,首先是创建一个工作空间Bazel从这个工作空间里查找编译文件和Bazel运行时所需要的配置文件。...之后,创建Bazel所需要的BUILD文件,在BUILD文件中定义了编译构建的执行过程。...当Bazel执行构建时,先加载与构建相关的文件,分析其输入和依赖关系,根据指定的规则生成动作图,再根据动作图执行构建操作,直至生产最终的容器镜像。Bazel由谷歌公司开源,在谷歌内部有广泛的使用。

    1.3K20

    大规模 Hadoop 升级在 Pinterest 的实践

    大多数最关键的批处理工作负载是在 Monarch 上运行,因此我们的首要任务是以不会对这些工作负载造成集群停机或性能/SLA 影响的方式执行升级。...然后在运行时,我们将用户类路径放在集群中存在的库路径之前。这可能会导致 Hadoop 2.10 节点的依赖问题,因为 Hadoop 2.7 和 2.10 可能依赖不同版本的第三方 jar。...为了解决这个问题(在2.10集群中使用 2.7 jar),我们决定将用户的 Bazel jar 从 Hadoop 库中解耦;也就是说,我们不再将 Hadoop jar 放在 fat user Bazel...Bazel java_binary 规则有一个名为 deploy_env 的参数,它的值是表示此二进制的部署环境的其他 java_binary 目标的列表。...在测试期间,我们花了很多精力来识别这些类型的情况,并修改用户的 bazel 规则,以显式地添加那些隐藏的依赖项。

    88020

    肘子的 Swift 周报 #028 |用 iPhone 感受像素的游戏的快乐!

    在本文中,Andrew Harrison 提供了一个关于如何开始学习 TCA 的指导路径。文章的主旨不在于直接教授 TCA 的使用方法,而是提供一个学习该框架的好的起点。...How to migrate an iOS app to Bazel[16] Brentley Jones[17] Bazel 是一个开源的多语言构建系统,广泛应用于大型项目和代码库中。...在这篇详尽的指南中,Brentley Jones 介绍了如何将 iOS 应用从 Xcode 迁移到 Bazel。...文章以 Mastodon iOS 项目作为实例,涵盖了从使用 swift_library 和 ios_application 等规则到利用远程缓存和执行优化构建性能的多个方面。...pvs=4 [16] How to migrate an iOS app to Bazel: https://t.ly/UuX4S [17] Brentley Jones: https://hachyderm.io

    9800

    SpringBoot系列Mybatis之参数传递的几种姿势

    private Integer cnt; } mapper 接口 @Mapper public interface MoneyMapper { } xml 文件,在资源文件夹下,目录层级与 mapper 接口的包路径完全一致...@Param 注解 在接口的参数上添加@Param注解,在内部指定传递给 xml 的参数名 一个简单的 case 如下 int addMoney(@Param("id") int id, @Param(...简单类型遵循上面的规则 map 参数的参,使用前缀 + "." + key 的方式 一个实例如下 List findByIdOrCondition(@Param("id") int...多参数场景下,简单对象 + map/pojo 时,对于 map/pojo 中的参数占位,可以通过 paramN.xxx 的方式来完成 最后一个问题来了,mybatis是如何将mapper接口中参数与xml...微信公众号: 一灰灰 Blog 尽信书则不如,以上内容,纯属一家之言,因个人能力有限,难免有疏漏和错误之处,如发现 bug 或者有更好的建议,欢迎批评指正,不吝感激 下面一灰灰的个人博客,记录所有学习和工作中的博文

    1.8K00
    领券