Bazel构建C++项目核心是编写WORKSPACE和BUILD文件,通过声明式设计实现可复现、可缓存的高效构建;WORKSPACE定义项目名与外部依赖,BUILD用cc_library/cc_binary/cc_test组织目标,配合bazel build/run/test等命令完*流程。
用 Bazel 构建 C++ 项目,核心是写好 WORKSPACE 和 BUILD 文件,让 Bazel 理解你的依赖和编译规则。它不是“配置越复杂越强”,而是靠声明式、可复现、可缓存的设计提升大型项目的构建效率。
每个 Bazel 项目根目录必须有 WORKSPACE 文件(可为空,但建议显式声明)。它定义项目名、加载外部依赖(如 googletest、abseil)和启用 C++ 规则。
workspace(name = "my_project") 命名项目,这个名字会在引用内部目标时用到(如 //:main)http_archive 引入,例如接入 absl:
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
http_archive(
name = "com_google_absl",
urls = ["https://github.com/abseil/abseil-cpp/archive/refs/tags/20250116.0.tar.gz"],
strip_prefix = "abseil-cpp-20250116.0",
)
WORKSPACE 中加 load("@rules_cc//cc:defs.bzl", "cc_library")
BUILD 文件放在每个模块目录下,声明该目录能构建什么。C++ 最常用的是 cc_binary、cc_library 和 cc_test。
cc_library 封装头文件和实现,供其他目标链接:
cc_library(
name = "utils",
srcs = ["utils.cc"],
hdrs = ["utils.h"],
visibility = ["//visibility:public"],
)
cc_binary 构建可执行文件,通过 deps 显式声明依赖:
cc_binary(
name = "app",
srcs = ["main.cc"],
deps = [":utils", "@com_google_absl//absl/strings:strings"],
)
cc_test 写单元测试,自动集成 gtest(如果已引入):
cc_test(
name = "utils_test",
srcs = ["utils_test.cc"],
deps = [":utils", "@com_google_googletest//:gtest_main"],
)
Bazel 命令统一以 bazel 形式运行,支持通配符和标签语法(如 //... 表示所有子包)。
bazel build //:app —— 编译目标,输出在 bazel-bin/ 下bazel run //:app —— 构建并立即运行bazel test //... —— 运行当前项目下所有测试bazel query 'deps(//:app)' —— 查看依赖图,调试依赖问题很实用bazel clean --expunge —— 彻底清空构建缓存(慎用,但解决诡异构建残留时有效)Bazel 默认使用系统工具链,但你可以控制编译器行为、启用警告或自定义 C++ 标准。
.bazelrc 中设置全局 C++ 选项:
build --cxxopt=-std=c++17 build --copt=-Wall --copt=-Wextra build --linkopt=-static-libstdc++
cc_toolchain 切换 GCC/Clang 或交叉编译(进阶场景,初学者可暂不深究)compile_commands
.json)供 VS Code 或 clangd 使用:
bazel run @rules_cc//tools/cpp:run_compilation_database -- --output=compile_commands.json
基本上就这些。Bazel 的学习曲线不在语法多难,而在于转变思维——从“我怎么让编译器干活”变成“我如何精确描述模块关系”。写好 BUILD 文件,就是为工程立下契约。
# c++
# js
# git
# json
# go
# github
# app
# 工具
# ai
# google
# vs code
# 封装
# 数据库
# 写好
# 的是
# 进阶
# 放在
# 目下
# 会在
# 自定义
# 但你
# 暂不
# 开源
相关文章:
如何自定义建站之星模板颜色并下载新样式?
小米网站链接制作教程,请问miui新增网页链接调用服务有什么用啊?
如何挑选最适合建站的高性能VPS主机?
建站主机核心功能解析:服务器选择与网站搭建流程指南
如何选择CMS系统实现快速建站与SEO优化?
清除minerd进程的简单方法
c# Task.ConfigureAwait(true) 在什么场景下是必须的
如何设置并定期更换建站之星安全管理员密码?
开心动漫网站制作软件下载,十分开心动画为何停播?
,如何利用word制作宣传手册?
如何用西部建站助手快速创建专业网站?
如何在Golang中使用encoding/gob序列化对象_存储和传输数据
建站之星如何保障用户数据免受黑客入侵?
如何在Windows服务器上快速搭建网站?
企业微网站怎么做,公司网站和公众号有什么区别?
建站之星×万网:智能建站系统+自助建站平台一键生成
建站之星如何助力网站排名飙升?揭秘高效技巧
活动邀请函制作网站有哪些,活动邀请函文案?
学生网站制作软件,一个12岁的学生写小说,应该去什么样的网站?
导航网站建站方案与优化指南:一站式高效搭建技巧解析
百度网页制作网站有哪些,谁能告诉我百度网站是怎么联系?
广州网站制作的公司,现在专门做网站的公司有没有哪几家是比较好的,性价比高,模板也多的?
如何制作一个表白网站视频,关于勇敢表白的小标题?
如何正确选择百度移动适配建站域名?
简单实现Android文件上传
如何快速搭建高效WAP手机网站?
建站之星安装后如何配置SEO及设计样式?
制作网站的软件免费下载,免费制作app哪个平台好?
C++中的Pimpl idiom是什么,有什么好处?(隐藏实现)
如何制作算命网站,怎么注册算命网站?
自助网站制作软件,个人如何自助建网站?
C#如何序列化对象为XML XmlSerializer用法
如何快速打造个性化非模板自助建站?
如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?
如何快速重置建站主机并恢复默认配置?
如何在阿里云购买域名并搭建网站?
香港服务器租用费用高吗?如何避免常见误区?
北京网站制作费用多少,建立一个公司网站的费用.有哪些部分,分别要多少钱?
常州企业建站如何选择最佳模板?
如何高效完成自助建站业务培训?
如何通过PHP快速构建高效问答网站功能?
如何选择建站程序?包含哪些必备功能与类型?
模具网站制作流程,如何找模具客户?
深圳企业网站制作设计,在深圳如何网上全流程注册公司?
如何通过商城免费建站系统源码自定义网站主题?
,想在网上投简历,哪几个网站比较好?
一键网站制作软件,义乌购一件代发流程?
如何在阿里云通过域名搭建网站?
济南企业网站制作公司,济南社保单位网上缴费步骤?
建站之星会员如何解锁更多建站功能?
*请认真填写需求信息,我们会在24小时内与您取得联系。