首页 > 后端开发 > C++ > 正文

c++如何使用Bazel构建系统_c++ Google的构建工具入门【工程化】

裘德小鎮的故事
发布: 2025-12-20 16:17:02
原创
447人浏览过
Bazel构建C++项目核心是编写WORKSPACE和BUILD文件,通过声明式设计实现可复现、可缓存的高效构建;WORKSPACE定义项目名与外部依赖,BUILD用cc_library/cc_binary/cc_test组织目标,配合bazel build/run/test等命令完成全流程。

c++如何使用bazel构建系统_c++ google的构建工具入门【工程化】

用 Bazel 构建 C++ 项目,核心是写好 WORKSPACEBUILD 文件,让 Bazel 理解你的依赖和编译规则。它不是“配置越复杂越强”,而是靠声明式、可复现、可缓存的设计提升大型项目的构建效率。

初始化 WORKSPACE:声明项目身份和外部依赖

每个 Bazel 项目根目录必须有 WORKSPACE 文件(可为空,但建议显式声明)。它定义项目名、加载外部依赖(如 googletest、abseil)和启用 C++ 规则。

  • workspace(name = "my_project") 命名项目,这个名字会在引用内部目标时用到(如 //:main
  • 若需 Google 开源库,用 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/20240116.0.tar.gz"],
        strip_prefix = "abseil-cpp-20240116.0",
    )
    
    登录后复制
  • 确保已启用 C++ 工具链:Bazel 6.0+ 默认启用;老版本需在 WORKSPACE 中加 load("@rules_cc//cc:defs.bzl", "cc_library")

编写 BUILD 文件:用目标(target)组织代码

BUILD 文件放在每个模块目录下,声明该目录能构建什么。C++ 最常用的是 cc_binarycc_librarycc_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 <verb><target></target></verb> 形式运行,支持通配符和标签语法(如 //...<code> 表示所有子包)。

8CMS企业网站管理系统 X1.0
8CMS企业网站管理系统 X1.0

8CMS网站管理系统 (著作权登记号 2009SRBJ3516 ),基于微软 asp + Access 开发,是实用的双模建站系统,应用于企业宣传型网站创建、贸易型网站创建、在线购买商务型网站创建。是中小型企业能够以最低的成本、最少的人力投入、在最短的时间内架设一个功能齐全、性能优异、SEO架构合理的网站平台工具。8CMS的使命是把建设网站最大程度的简化。

8CMS企业网站管理系统 X1.0 0
查看详情 8CMS企业网站管理系统 X1.0

立即学习C++免费学习笔记(深入)”;

  • bazel build //:app —— 编译目标,输出在 bazel-bin/
  • bazel run //:app —— 构建并立即运行
  • bazel test //... —— 运行当前项目下所有测试
  • bazel query 'deps(//:app)' —— 查看依赖图,调试依赖问题很实用
  • bazel clean --expunge —— 彻底清空构建缓存(慎用,但解决诡异构建残留时有效)

小技巧:让 C++ 开发更顺手

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++++如何使用Bazel构建系统_c++ Google的构建工具入门【工程化】的详细内容,更多请关注php中文网其它相关文章!

c++速学教程(入门到精通)
c++速学教程(入门到精通)

c++怎么学习?c++怎么入门?c++在哪学?c++怎么学才快?不用担心,这里为大家提供了c++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号