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

如何在Bazel规则中运行其他规则的可执行文件?

在Bazel规则中运行其他规则的可执行文件可以通过以下步骤实现:

  1. 确保你已经定义了要运行的目标规则和依赖规则。目标规则是你想要运行的可执行文件规则,而依赖规则是目标规则所依赖的其他规则。
  2. 在目标规则的action中,使用$(location)函数获取依赖规则的可执行文件路径。该函数将返回依赖规则的输出路径。
  3. 将获取到的依赖规则的可执行文件路径传递给目标规则的action中的命令行参数。

以下是一个示例:

代码语言:txt
复制
load("@bazel_skylib//rules:shell_utils.bzl", "bash")

# 定义依赖规则
cc_binary(
    name = "dependency",
    srcs = ["dependency.cc"],
    deps = [],
)

# 定义目标规则
cc_binary(
    name = "target",
    srcs = ["target.cc"],
    deps = [":dependency"],
    actions = [
        # 在action中运行依赖规则的可执行文件
        bash(
            "$(location :dependency)",
            "--input_file=$(location :input_file)",
            "--output_file=$(location :output_file)",
        ),
    ],
)

在上述示例中,我们定义了一个依赖规则dependency和一个目标规则target。在targetactions中,我们使用bash函数来运行dependency的可执行文件。注意,我们使用$(location :dependency)来获取dependency的输出路径,并将其作为命令行参数传递给bash函数。

这样,当你构建并运行target时,它将自动运行dependency的可执行文件,并传递相应的命令行参数。

请注意,以上示例中的cc_binarybash函数是Bazel的内置规则和函数,用于编译C++代码和运行Shell命令。具体的语法和用法可能会根据你使用的编程语言和工具链而有所不同。你可以根据自己的实际情况进行调整和修改。

推荐的腾讯云相关产品:腾讯云容器服务(Tencent Kubernetes Engine,TKE),它是一种高度可扩展的容器管理服务,可帮助您轻松运行和管理容器化应用程序。您可以使用TKE来部署和管理Bazel构建的容器化应用程序。了解更多信息,请访问TKE产品介绍

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

相关·内容

何在CDH配置YARN动态资源池计划规则

1.文档编写目的 ---- 在CDH中使用Yarn动态资源池,用户会根据时段来区分集群资源分配情况(:在夜晚时段集群资源主要倾向于跑批作业,白天时段集群资源主要倾向于业务部门实时计算作业)。...针对这样需求在CDH如何配置?本篇文章Fayson主要介绍如何通过CM配置Yarn动态资源池计划规则。...3.点击“创建计划规则”,创建两个新配置集 创建新配置集时需要从一个现有的配置集进行复制,可以选择配置集重复周期“每天、每周、每月”,重复时间以小时为单位进行选择。 ? ?...如上步骤完成各个配置集资源池配置。 4.验证配置集是否生效 ---- 根据资源池配置集配置规则,当前时间为晚上10点,此时应该使用资源池为pool_nigth配置集。...可以看到root.default资源池是root.users资源池占比4倍,与配置集计划规则一致。 5.总结 ---- 1.通过CM动态资源池配置,可以方便创建多个配置集。

6.1K61

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

1 前言 2 自定义规则实现 2.1 规则功能 2.2 实现规则理论基础 2.3 规则代码实现 3 总结 4 参考资料 1 前言 为了实现标题所述将多个静态库合并为一个动态库,内置 Bazel...规则是没有这个功能Bazel C/C++ 相关内置规则有: cc_binary :生成可执行文件 cc_import :允许用户导入预编译 C/C++ 库,包括动态库、静态库 cc_library...例如 cc_binary 规则可能: 输入(Inputs):获取一组 .cpp 文件 动作(Action):基于输入运行 g++ 输出(Output):返回一个可执行文件Bazel 角度来看,g...所有创建 Action 函数都定义在 ctx.actions : ctx.actions.run :运行一个可执行文件 ctx.actions.run_shell :运行一个脚本命令 ctx.actions.write...其他比如还可以编写测试规则(类名需以_test结尾)、actions.write(适合小文件生成)、actions.expand_template(用模板生成文件)、用 aspect 从依赖搜集信息等等规则具体用法

5.2K20

构建Golang项目

但是 Go 编译内置规则没有支持,不过好在 Bazel 支持规则扩展,可以自定义 Go 相关规则,包括可以实现 go_binary、go_library、go_test等规则。...而 `rules_go`[1] 就是 Bazel 官方维护 Go Bazel 开源扩展规则。...cgo,则需要本机上有 C/C++ 工具链,默认 Bazel 会尝试自动配置工具链 Bash、patch、cat 和 PATH 其他一些 Unix 工具 无需安装 Go 工具链,Bazel 会自动为每个项目下载最新版本...gazelle 另一种方式就是直接和 Bazel 集成使用,作为一个外部规则导入使用,WORKSPACE 文件:。...gazelle 生成相关依赖模块导入代码和 BUILD.bazel 文件: # 根据 go.mod,将go_repository规则写入一个单独宏文件并将其加载到 WORKSPACE 文件 $ bazel

3.9K10

【C++】基础:代码编译与构建工具介绍

常用构建工具包括: Make:GNU 构建工具,使用 Makefile 文件描述构建规则。 CMake:跨平台构建工具,使用 CMakeLists.txt 文件描述构建规则。...gcc可以将C语言源程序编译、链接成可执行文件,如果没有给出可执行文件名字,gcc将生成一个名为a.out文件(g++类似,是编译C++程序)。...常用构建工具 make make工具相当于一个批处理工具,本身没有编译和链接功能,而是用类似于批处理方式通过调用makefile文件中用户指定编译命令(gcc、g++)来进行编译和链接(当作批处理工具用就行...… sourceN 编译出一个库文件且命名为name:add_library(Lib ${DIR_SRCS}) 用于指定某个目标(可执行文件或者库文件)依赖于其他目标。...<< std::endl; return 0; } BUILD cc_binary( name = "hello", srcs = ["main.cc"], ) 构建与运行bazel

14410

扩展 Bazel 构建语言

本篇介绍何使用宏和规则扩展 Bazel 构建语言。 在学习更高级概念之前,先了解以下几个知识点: 了解 BUILD 和 .bzl 文件中使用 Starlark 语言。...宏和规则(Macros and rules)。 BUILD 三个阶段 了解如何在两个 BUILD 文件之间共享变量。...规则比宏更强大。它可以访问 Bazel 内部信息,并完全掌控将要处理内容。例如,它可以将信息传递给其他规则。 如果您想重复使用简单逻辑,请从宏开始。如果宏变得复杂,通常最好使其成为规则。...规则适用于高级用户,大多数用户永远都不需要编写规则;它们只会加载和调用现有规则。 BUILD 三个阶段 加载阶段。规则实例化,将其添加到图表。 分析阶段。...执行规则代码(其 implementation 函数),并将操作实例化。一个操作描述了如何从一组输入生成一组输出,“在 hello.c 上运行 gcc 和获取 hello.o”。

1.7K10

repository_rule() vs rule()

运行 在分析阶段 会新建一个工作区(WORKSPACE) 在本 WORKSPACE 注意: 构建分 fetch(获取), load(加载), analysis(分析) 和 execute(执行)...从构建阶段来看,rule() 规则可以依赖 repository_rule() 生成 BUILD 文件目标或者 bzl 文件等。...git 仓库 与 http 相关规则:@bazel_tools//tools/build_defs/repo:http.bzl http_archive:将 Bazel 相关压缩存档文件远程仓库下载下来...其实就相当于我们要实现一套语言相关规则了,比如 go_binary,怎么去实现下载指定 Go 发行版 SDK,并编译出该 SDK 对应可执行文件呢?...我们则需要去定义工具链以及定义工具链动作,比如编译动作(Action)。最后实现 go_binary,将输入(源文件)传入规则,并调用具体动作实现最后可执行文件生成。

2.4K20

自定义工具链

Bazel C++ 相关规则已经支持平台,而 Android 相关规则不支持。你 C++ 项目可能不关心 Android,但其他人可能会。...约束是构建或生产环境可能不同维度,比如 CPU 架构、GPU 存在或缺失,或者系统安装编译器版本。第一章所述,平台是这些约束指定选择集合,表示在某些环境可用特定资源。...Bazel 认为平台可以扮演三个角色: Host(主机): Bazel 本身运行平台 Execution(执行): 构建工具执行构建操作以产生中间和最终输出平台,执行平台设置一般是固定。...Bazel 支持以下针对平台构建场景: 单平台构建(默认):主机、执行和目标平台是相同。例如,在运行在 Intel x64 CPU 上 Ubuntu 上构建 Linux 可执行文件。...Bazel 附带以下特殊平台定义 :@local_config_platform//:host。会自动检测主机平台值:表示 Bazel 运行系统平台。

4.6K31

快来用Makefile管理工程,提高工作效率!

Makefile 文件包含了一系列规则来指导如何产生目标文件,这些规则包含目标、依赖和命令: 目标(Target):这通常是要生成文件名,例如可执行文件或者对象文件。...依赖(Dependencies):这是生成目标所需文件或目标。 命令(Commands):这些是生成目标时需要执行命令。 Makefile 使用 GNU make 工具来执行文件定义规则。...当在命令行运行 make 命令时,make 程序会在当前目录下查找名为 Makefile 或 makefile 文件,并执行其指令。...嵌入式系统通常涉及到对硬件紧密控制软件,这些软件需要在资源受限(内存和处理能力)环境中高效运行。 多平台支持:嵌入式设备常见于各种硬件和架构, ARM, MIPS, 或 x86。...Bazel: 用途:虽然是通用构建工具,但在需要处理大型源代码库嵌入式项目中表现优异。

12810

构建抽象

不同编程语言编写应用,在它运行状态下,会有不同运行机制,有的是以二进制方式运行,有运行在编程语言虚拟机之上。...即构建产生产物,可能是可复用软件包,也可能是可运行应用。 任务。定义构建规则,并执行。 FAQ 为什么是没有项目?在业务领域和技术领域,我们对于项目的定义存在着一定歧义性。...我们可以将其视为最终产物, Android 生成 APK,Rust 最后生成可执行文件。过程,生成共享包都是为了支持这个工程一部分。... Bazel 对于 Java 构建示例: java_binary( name = "ProjectRunner", srcs = ["src/main/java/com/phodal/ProjectRunner.java...自制外部 DSL 语言。 Gradle 所使用 Groovy、多语言 Bazel

93930

Bazel 7 发布:全新模块化依赖管理、无字节构建与多目标构建性能提升

作者 | Sergio De Simone 译者 | Sambodhi 策划 | 丁晓昀 最近在 BazelCon 23 上宣布,Bazel 7 推出了多年来一直在开发一系列新功能,其中包括全新模块化外部依赖管理系统...相反,它从模块构建依赖图,运行在图顶部扩展,并相应地定义 repos。Bzlmod 现在默认启用,这意味着如果一个项目没有 MODULE.bazel 文件,Bazel 将创建一个空文件。...最后提到,Bazel 7 现在默认启用了基于平台工具链解析,适用于其 Android 和 C++ 规则。...这一变化旨在简化所有规则集中工具链解析 API,从而省去语言特定标志, --android_cpu 和 --crosstool_top。...关于 Bazel 7 其他功能,由于篇幅限制无法一一详述,请务必查看 官方发布说明 获取完整细节。 作者简介: Sergio De Simone 是一位资深软件工程师。

30010

Bazel 7 发布:全新模块化依赖管理、无字节构建与多目标构建性能提升

作者 | Sergio De Simone 译者 | Sambodhi 策划 | 丁晓昀 最近在 BazelCon 23 上宣布,Bazel 7 推出了多年来一直在开发一系列新功能,其中包括全新模块化外部依赖管理系统...相反,它从模块构建依赖图,运行在图顶部扩展,并相应地定义 repos。Bzlmod 现在默认启用,这意味着如果一个项目没有 MODULE.bazel 文件,Bazel 将创建一个空文件。...最后提到,Bazel 7 现在默认启用了基于平台工具链解析,适用于其 Android 和 C++ 规则。...这一变化旨在简化所有规则集中工具链解析 API,从而省去语言特定标志, --android_cpu 和 --crosstool_top。...关于 Bazel 7 其他功能,由于篇幅限制无法一一详述,请务必查看 官方发布说明 获取完整细节。 作者简介: Sergio De Simone 是一位资深软件工程师。

16310

自定义命令行编译标志

构建标志产生构建设置,但是可以通过其他方式(例如通过transitions)来设置构建设置。没有附带标志构建设置对用户不可见。规则设计者可以利用它,例如使规则在其依赖项上设置隐式属性。...=(-c) 等方式,是 Bazel 版本内置,而用户自定义编译设置可以在 .bzl 文件实现,不需要重新编译 Bazel 源码就可以实现 我们最终实现: $ bazel build //my:binary...当然,简单,我们可以定义构建设置,只限制值类型,而不限制值内容。 构建设置相关规则其他规则定义差不多,区别就是看有没有 build_setting 属性。...4 自定义构建设置实现和实例化 同我们之前文章介绍自定义规则一样,自定义构建设置规则也需要有实现,即 implementation = _string_impl _string_impl 函数。...5 自定义规则绑定自定义构建设置 比如我们定义了一个 date 规则,我们在构建 date 目标时,希望能够在命令行获取 week 参数,则我们需要在 date 规则实现能够获取 week 配置值

2.5K40

Airbnb从Buck 迁移到 Bazel,大幅改善开发者体验

作者 | Sergio De Simone 译者 | 明知山 策划 | 丁晓昀 随着其他组织将他们构建管道迁移到Bazel 之后,Airbnb 也发布了一个详细说明,分享了他们弃用 Buck...尽管 Buck 和 Bazel 有相似之处,但它们在所提供规则方面有所不同。...例如,Buck 提供了 apple_library 和 apple_binary 等规则,而 Bazel 根据外部规则不同提供了 swift_library 和 apple_framework 等规则...在 Airbnb 案例,解决这个问题方法是创建一个包装本地和外部规则薄片(shim)层。...rules_shim层也是处理 genrule 关键。在 Airbnb,genrules 用于生成 iOS 代码库样板代码,并且在两个构建系统上有不同语法。

10510

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

Bazel定义构建依赖关系和规则,并管理构建生成临时文件及二进制文件,具体编译工作是调用各个语言编译工具GCC, JAVAC等完成。...为了理解Envoy编译过程,我们需要先了解Bazel几个基础概念 workspace: 文件系统一个目录,该目录包含了用于编译软件所需所有源文件。...如果一切顺利,bazel会在proxy目录下创建一个目录链接bazel-bin,指向生成二进制文件。 编译过程分析 源码目录结构如下,主要构建逻辑在引号包含文件。...c++二进制rule,其中deps部分是其依赖其他target。...前5个target都是本地依赖,对应到源码目录其他子目录下BUILD文件,其中最后一个比较特殊,是一个外部依赖,该外部库为envoy。 外部库定义在根目录下WORKSPACE文件

1.7K10

连1.0版本都没有,Uber为什么会采用这样一项新技术?

现在,Uber 只在 Go Monorepo 中使用 bazel-zig-cc,但计划尽可能地将zig cc推广到其他需要 C/C++ 工具链语言。...Go 和 Java 是通用服务器端语言,Python 和 Node 应用于特定情况( Node 用于前端,Python 用于数据分析 /ML)。C++ 被用于一些底层库。...在 Bazel 创建一个封闭式 C++ 工具链是一项很大工作(对于我们 Go Monorepo 来说,需要花费数月时间),没有迫切需求,也没有足够痛苦,我们还无法接受做这样一件事。...CGo 可执行文件将链接到系统上发现 glibc 版本。也就是说,在升级操作系统时(数月努力),构建机群必须最后升级。...我集成了zig ar,完善了文档,并 在 Zig 邮件列表宣布了我创建 bazel-zig-cc 分叉。至此,它对我小项目是有效

1.5K20

如何挖掘 Bazel 极致性能

Bazel 官方定义了一些规则 (rule),用于构建某些特定产物,例如 c++ library 或者 go 语言 package,用户配置和调用这些规则。...他仅仅需要告诉 Bazel 要构建什么 Artifact,而由 Bazel 来决定如何构建它。 规则由官方和可信赖第三方维护,规则产生任务,满足封闭性需求,这使得用户可以信赖系统增量构建能力。...当用户告诉 Bazel 要构建某个 Target 时候,Bazel 会分析这个文件如何构建(构建动作定义为 Action,和其他构建系统 Task 大同小异),如果 Target 依赖了其他 Target...这个分析过程完全在内存完成,所以如果整个工程无需重新构建,即便是几万个 Action,也能在一秒以内分析完毕。而其他系统,至少需要花费几十秒时间来重新构建 ActionGraph。...不同于本地构建,CI 场景为了追求强隔离性,往往以实时运行 Docker Container 方式提供构建环境。也就是说,构建环境不包含上一次构建数据。

60820

0490-如何为GPU环境编译CUDA9.2TensorFlow1.8与1.12

作者:李继武 1 文档编写目的 从CDSW1.1.0开始支持GPU,具体可以参考Fayson之前文章《如何在CDSW中使用GPU运行深度学习》,从最新CDSW支持GPU网站上我们可以查到相应Nvidia...我们注意到CUDA版本是9.2,但是目前官方发布编译好TensorFlowCUDA版本还是9.0,为了在CDSW环境让TensorFlow运行在GPU上,必须使用CUDA9.2,我们需要手动编译...2 安装编译过程需要包及环境 此部分两个版本操作都相同 1.配置JDK1.8到环境变量 ?...这部分编译不同tensorflow版本需要安装不同版本bazel,使用太新版本有 时会报错。...使用该--help 命令可以查看其他安装选项。 ? 显示下面的提示表示安装成功: ? 如果使用--user上面的标志运行Bazel安装程序,则Bazel可执行文件将安装在$HOME/bin目录

3.5K30
领券