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

admin 百科 13
Bazel构建C++项目核心是编写WORKSPACE和BUILD文件,通过声明式设计实现可复现、可缓存的高效构建;WORKSPACE定义项目名与外部依赖,BUILD用cc_library/cc_binary/cc_test组织目标,配合bazel build/run/test等命令完成全流程。

c++如何使用Bazel构建系统_c++ Google的构建工具入门【工程化】-第1张图片-佛山资讯网

用 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> 表示所有子包)。

标签: c++ bazel js git json go github app 工具 ai google vs code

发布评论 0条评论)

还木有评论哦,快来抢沙发吧~