百度apollo - Apollo编译软件Bazel:2. 编译,IDE,以及答疑

本文介绍了Google的构建工具Bazel,它是一个支持多语言、多平台的构建工具,强调重现性和伸缩性。Bazel不同于其他构建工具如Make、Ant和Gradle,具有高级别的构建语言和内置规则。文章解答了为何Google创建Bazel,以及如何与IDE和持续集成系统结合使用,同时探讨了Bazel在不同场景的应用和未来发展方向。

百度Apollo采用bazel作为代码编译构建工具

每个模块下都有一个build文件,其作用是按照bazel的格式来编译代码的。

关于如何使用bazel编译c++代码,可以见如下网址:

安装教程 - https://docs.bazel.build/versions/master/install.html
bazel教程 - https://docs.bazel.build/versions/master/tutorial/cpp.html
我的bazel教程 - https://blog.youkuaiyun.com/DinnerHowe/article/details/79815087

下面来介绍为什么百度要用bazel以及docker来编译以及做系统环境吧:

Google软件构件工具Bazel答疑

首先原文在这里。参考文献在这里Google软件构建工具Bazel原理及使用方法介绍

Bazel是什么?

Bazel是一个构建工具,即一个可以运行编译和测试来组装软件的工具,跟Make、Ant、Gradle、Buck、Pants和Maven一样。

Bazel有什么特殊之处

Bazel是设计用来配合Google的软件开发模式。有以下几个特点:

  • 多语言支持:Bazel支持Java,Objective-C和C++,可以扩展来支持任意的编程语言
  • 高级别的构建语言:工程是通过BUILD语言来描述的。BUILD语言以简洁的文本格式,描述了由多个小的互相关联的库、二进制程序和测试程序来组成的一个项目。而与之相比,Make这类的工具需要描述各个单独的文件和编译的命令
  • 多平台支持:同一套工具和同样的BUILD文件可以用来构建不同架构和不同平台的软件。在Google,我们使用Bazel来构建在我们数据中心系统中运行的服务器端程序和在手机上运行的客户端应用程序。
  • 重现性[Reproducibility]:在BUILD文件中,每个库,测试程序,二进制文件必须明确完整地指定直接依赖。当修改源代码文件后,Bazel使用这个依赖信息就可以知道哪些必须重新构建,哪些任务可以并行执行。这意味者所有的构建都是增量形式的并能够每次都生成相同的结果。
  • 伸缩性[Scalability]:Bazel可以处理巨大的构建;在Google,一个服务器端程序超过100k的源码是常有的事情,如果没有文件被改动,构建过程需要大约200ms

为什么Google不使用...?

  • Make,Ninja: 通过这些工具都能够控制执行哪些命令来构建文件,但是需要用户书写正确的规则。

    用户跟Bazel在更高级别上交互。例如,它有内置的"Java test", "C++ binary"的规则[rule],有例如“目标平台”[target platform],“主机平台"[host platform]这种标记。这些规则都经历了充分的测试,是不会出错的。
  • Ant和Maven:Ant和Maven主要是面向Java,而Bazel可以处理多种语言。Bazel鼓励把代码库的内容划分成小的,可复用的单元,并且只重新构建需要重新构建的文件。这会提高在庞大的代码库上开发的速度。
  • Gradle: Bazel 配置文件比Gradle的要更加结构化,让Bazel能够准确理解每个行为的所作所为。使得能够有更多的并发和更好的可重现性
  • Pants, Buck:

[root@k8s-master1 apollo-offline]# curl -I https://apolloconfig.github.io/apollo-helm-charts HTTP/2 404 server: GitHub.com content-type: text/html; charset=utf-8 etag: "69249940-239b" content-security-policy: default-src 'none'; style-src 'unsafe-inline'; img-src data:; connect-src 'self' x-github-request-id: F614:3F307:D42740:D99A71:692ECEA6 accept-ranges: bytes date: Tue, 02 Dec 2025 11:33:59 GMT via: 1.1 varnish age: 0 x-served-by: cache-sjc1000127-SJC x-cache: MISS x-cache-hits: 0 x-timer: S1764675239.100672,VS0,VE94 vary: Accept-Encoding x-fastly-request-id: 15c8b868ed5fa1abcf74bb2a150c3d9fa51fafbb content-length: 9115 [root@k8s-master1 apollo-offline]# [root@k8s-master1 apollo-offline]# helm repo add apollo https://apolloconfig.github.io/apollo-helm-charts/ Error: looks like "https://apolloconfig.github.io/apollo-helm-charts/" is not a valid chart repository or cannot be reached: failed to fetch https://apolloconfig.github.io/apollo-helm-charts/index.yaml : 404 Not Found [root@k8s-master1 apollo-offline]# [root@k8s-master1 apollo-offline]# [root@k8s-master1 apollo-offline]# helm repo add apollo https://apolloconfig.github.io/apollo-helm-charts/ Error: looks like "https://apolloconfig.github.io/apollo-helm-charts/" is not a valid chart repository or cannot be reached: failed to fetch https://apolloconfig.github.io/apollo-helm-charts/index.yaml : 404 Not Found [root@k8s-master1 apollo-offline]# helm repo add apollo https://raw.githubusercontent.com/apolloconfig/apollo-helm-charts/main/ Error: looks like "https://raw.githubusercontent.com/apolloconfig/apollo-helm-charts/main/" is not a valid chart repository or cannot be reached: failed to fetch https://raw.githubusercontent.com/apolloconfig/apollo-helm-charts/main/index.yaml : 404 Not Found [root@k8s-master1 apollo-offline]# wget https://github.com/apolloconfig/apollo-helm-charts/archive/refs/tags/v1.7.0.tar.gz --2025-12-02 19:33:41-- https://github.com/apolloconfig/apollo-helm-charts/archive/refs/tags/v1.7.0.tar.gz 正在解析主机 github.com (github.com)... 20.205.243.166 正在连接 github.com (github.com)|20.205.243.166|:443... 已连接。 已发出 HTTP 请求,正在等待回应... 404 Not Found 2025-12-02 19:33:43 错误 404:Not Found。 [root@k8s-master1 apollo-offline]#
最新发布
12-03
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值