老卫带你学---Bazel学习笔记(二)

今天继续学习Bazel的相关概念

安装

bazel提供很多系统的安装介绍,并且也可以在container进行开发,相关的信息在它们官网有介绍:
Bazel安装

概念

1. workspace、package、target
  • workspace: 其实就是bazel所要负责构建的仓库
  • package: 一个workspace下有多个package,每个package里是有BUILD文件来定义
  • target: 一个package里有两大类的target
    • files: 文件里根据来源可以分为两类:
      • source files: 一般指的我们研发人员所写的代码
      • generate files: 一般指的是由其他文件生成的文件
    • rules: 定义了输入和输出的关系,以及构建输出的步骤
2. labels

在Bazel里,label用来唯一标识构建目标以及依赖项。
比如//path/to/package:target,前半部分代表目录或者package,后面就是目标。
通过label,可以在BUILD文件中指明依赖项,从而构建依赖图,进而可以更好的实现增量构建,测试,部署

3.BUILD

每个package中包含BUILD文件,该文件用来定义构建的声明

语言用starlark编写,它本身不支持I/O,仅依赖一组已知的输入,这位构建的重现提供了保障

4.依赖关系

bazel通过构建DAG(有向无环图)来梳理依赖关系,其中包含声明依赖图与实际依赖图。

  • 添加声明的依赖,a依赖b,b依赖c。这种情况下,声明依赖图与实际依赖图一致
  • 未添加声明的依赖,这种情况需要主要a可能在生命依赖b的时候,实际依赖了c

另外依赖的类型主要有:srcs、deps、data

5.visibility

bazel中有两个可见性系统(目标可见性、负载可见性),这两个可见性系统可以帮助研发人员区分库中的公共API和细节

https://bazel.google.cn/concepts/visibility

目标可见性:

  • target visibility:决定了哪个目标可以依赖你,这其实就是哪个目标可以在它的deps中写上你。package是visibility的颗粒单元,这里需要注意一点,赋予包visibility并不代表赋予子包visibility。
  • visibility spec: 定义visibility的几个常用关键字
    • “//visibility:public”:授予对所有包的访问权限
    • “//visibility:private”:不授予任何额外的访问权限;只有此包中的目标才能使用此目标
    • “//foo/bar:__pkg__”:授予对//foo/bar(但不包括其子包)的访问权限
    • “//foo/bar:__subpackages__”:授予访问权限//foo/bar及其所有直接和间接子包
    • “//some_pkg:my_package_group”:授予对属于给定package_group权限
  • rule target visibility: 这个是为了指定rule的可见性,已保护一些rule不被其他直接依赖

加载可见性(load visibility):
在加载过程中控制其他文件.bzl是否可以加载它。目标可见性保护的是源码,加载可见性保护的是构建过程。

简单的就是在.bzl最上面加上visibility(“XXXX”)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/667245.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

说说RDB和AOF

简介: 众所周知,redis是一个内存数据库,当机器重启后,内存中数据都会丢失。所以redis提供了两种持久化方式,即:RDB(保存一个时间点前的数据)和AOF(保存redis服务器端执行的每一条命令)。 RDB: RDB有两种…

【算法与数据结构】300、674、LeetCode最长递增子序列 最长连续递增序列

文章目录 一、300、最长递增子序列二、674、最长连续递增序列三、完整代码 所有的LeetCode题解索引,可以看这篇文章——【算法和数据结构】LeetCode题解。 一、300、最长递增子序列 思路分析: 第一步,动态数组的含义。 d p [ i ] dp[i] dp[i…

程序执行内存区域,堆栈使用及区别

文章目录 一、程序执行内存区域二、堆区详解三、栈内存与堆内存的区别总结 一、程序执行内存区域 **代码区:**当我们的程序被执行时,它会有一个加载准备的过程。其中函数及内部的流程结构代码指令会被放到代码区中,等待着被调用执行。 **常数…

【JS】基于React的Next.js环境配置与示例

😏★,:.☆( ̄▽ ̄)/$:.★ 😏 这篇文章主要介绍基于React的Next.js环境配置与示例。 学其所用,用其所学。——梁启超 欢迎来到我的博客,一起学习,共同进步。 喜欢的朋友可以关注一下,下…

【乳腺肿瘤诊断分类及预测】基于自适应SPREAD-PNN概率神经网络

课题名称:基于自适应SPREAD-PNN的乳腺肿瘤诊断分类及预测 版本日期:2023-06-15 运行方式: 直接运行PNN0501.m 文件即可 代码获取方式:私信博主或QQ:491052175 模型描述: 威斯康辛大学医学院经过多年的收集和整理&…

【python】cffi 在 Python 代码中调用 C 代码

cffi(C Foreign Function Interface)是 Python 中的一个库,它提供了一种在 Python 代码中调用 C 代码的方法。通过 cffi,你可以编写 Python 代码来直接使用 C 函数、调用共享库(.so 或 .dll 文件)&#xff…

笔记---求组合数

总&#xff1a; ①10w次询问——1 < b < a < 2000——递推求—— N N N2 ②1w次询问——1 < b < a < 105——公式求—— N l o g N NlogN NlogN ③20次询问——1 < b < a < 1018——Lucas定理 ④1次询问——1 < b < a < 5000——拆分质因子…

【数据结构与算法】(7)基础数据结构之双端队列的链表实现、环形数组实现示例讲解

目录 2.6 双端队列1) 概述2) 链表实现3) 数组实现习题E01. 二叉树 Z 字层序遍历-Leetcode 103 2.6 双端队列 1) 概述 双端队列、队列、栈对比 定义特点队列一端删除&#xff08;头&#xff09;另一端添加&#xff08;尾&#xff09;First In First Out栈一端删除和添加&…

普渡机器人CEO预测2024年服务机器人市场将扩大

原创 | 文 BFT机器人 根据普渡科技有限公司的报告&#xff0c;商用服务机器人在东亚地区的应用比其他地方更为广泛。然而&#xff0c;预计到2024年&#xff0c;全球其他地区也将迎头赶上。这家总部位于中国深圳的公司自豪地宣称&#xff0c;它已经成为中国最大的此类机器人出口…

基于微信小程序的书籍阅读系统,附源码

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

【Unity知识点详解】自定义程序集

今天来介绍一下Unity中的自定义程序集。在项目开发中我们经常接触到第三方插件的程序集&#xff0c;如DOTween、Newtonsoft.Json等。 使用自定义程序集有这么几个好处&#xff1a; 方便代码的的复用。当某一功能模块需要在多个项目中重复使用时&#xff0c;可以将代码编译成程…

Linux 驱动开发基础知识——内核对设备树的处理与使用(十)

个人名片&#xff1a; &#x1f981;作者简介&#xff1a;学生 &#x1f42f;个人主页&#xff1a;妄北y &#x1f427;个人QQ&#xff1a;2061314755 &#x1f43b;个人邮箱&#xff1a;2061314755qq.com &#x1f989;个人WeChat&#xff1a;Vir2021GKBS &#x1f43c;本文由…

【数据结构与算法】(5)基础数据结构之队列 链表实现、环形数组实现详细代码示例讲解

目录 2.4 队列1) 概述2) 链表实现3) 环形数组实现 2.4 队列 1) 概述 计算机科学中&#xff0c;queue 是以顺序的方式维护的一组数据集合&#xff0c;在一端添加数据&#xff0c;从另一端移除数据。习惯来说&#xff0c;添加的一端称为尾&#xff0c;移除的一端称为头&#xf…

安装配置Oracle 11g 、PLSQL及使用Navicat远程连接Oracle

目录 一、下载 二、安装 1.执行安装程序 2.配置安全更新 3.安装选项 4.系统类 5.网络安装选项 6.选择安装类型 7.选择产品语言 8.选择数据库版本 9.指定安装位置 10.选择配置类型 ​编辑11.指定数据库标识符 12.指定配置选项 13.电子邮箱 14.指定数据库存储…

自学Java的第十九天

一&#xff0c;每日收获 1.排序 2.冒泡排序法 3.查找 4.多维数组-二维数组 二&#xff0c;新名词与小技巧 三&#xff0c;今天学习中所遇到的困难 一&#xff0c;每日收获 1.排序 ① 排序的介绍 排序是将多个数据&#xff0c;依指定的顺序进行排列的过程。 ② 排序的…

学习c语言,动态内存管理

malloc和calloc区别在于初始化 realloc动态内存

前端如何预防CSRF

①阻⽌不明外域的访问&#xff1a; 同源检测 、Samesite Cookie ②提交时要求附加本域才能获取的信息&#xff1a; CSRF Token 、双重Cookie验证 1、同源检测 既然CSRF⼤多来⾃第三⽅⽹站&#xff0c;那么我们就直接禁⽌外域&#xff08;或者不受信任的域名&#xff09;…

网课:[CQOI2009]中位数图——牛客(疑问)

涉及知识点&#xff1a;已知中位数的题的一般思路 题目描述 给出1~n的一个排列&#xff0c;统计该排列有多少个长度为奇数的连续子序列的中位数是b。中位数是指把所有元素从小到大排列后&#xff0c;位于中间的数。 输入描述: 第一行为两个正整数n和b &#xff0c;第二行…

【从单张图像解锁深度信息】Depth Anything一种用于鲁棒单目深度估计的高度实用的解决方案

Depth Anything是一种用于鲁棒单目深度估计的高度实用的解决方案。 在不追求新颖的技术模块的情况下,我们的目标是建立一个简单而强大的基础模型,处理任何情况下的任何图像。 为此,我们通过设计数据引擎来收集并自动注释大规模未标记数据(~62M)来扩展数据集,这显着扩大了…

Axure详细介绍

1. 元件基本介绍 2. 基础元件的使用 3. 表单型元件的使用 4. 菜单与表格元件的使用 使用&#xff1a;如果想使用某个元件&#xff0c;我们只需要将它从元件库中拖入画布摆放即可。 - 对齐&#xff1a;默认情况下&#xff0c;两个矩形元件并排摆放&#xff0c;中间的边框为两…