C++ 和 Bazel

报告问题 查看源代码

本页包含可帮助您将 Bazel 与 C++ 项目结合使用的资源。此页面提供了指向教程、构建规则以及其他与使用 Bazel 构建 C++ 项目有关的信息的链接。

使用 Bazel

以下资源有助于您在 C++ 项目上使用 Bazel:

最佳实践

除了常规 Bazel 最佳实践之外,以下是专门针对 C++ 项目的最佳做法。

BUILD 文件

创建 BUILD 文件时,请遵循以下准则:

  • 每个 BUILD 文件都应针对目录中的每个编译单元包含一个 cc_library 规则目标。

  • 您应尽可能细化 C++ 库,以最大限度地提高增量和并行构建。

  • 如果 srcs 中只有一个源文件,请使用该 C++ 文件的名称为库命名。此库应包含 C++ 文件、任何匹配的头文件以及库的直接依赖项。例如:

    cc_library(
        name = "mylib",
        srcs = ["mylib.cc"],
        hdrs = ["mylib.h"],
        deps = [":lower-level-lib"]
    )
    
  • 对文件中的每个 cc_library 目标使用一个 cc_test 规则目标。将目标命名为 [library-name]_test,将源文件命名为 [library-name]_test.cc。例如,上述 mylib 库目标的测试目标将如下所示:

    cc_test(
        name = "mylib_test",
        srcs = ["mylib_test.cc"],
        deps = [":mylib"]
    )
    

包含路径

对于包含路径,请遵循以下准则:

  • 创建相对于工作区目录的所有包含路径。

  • 对于非系统头文件,请使用带英文引号的 include (#include "foo/bar/baz.h"),而不要使用尖括号 (#include <foo/bar/baz.h>)。

  • 避免使用 UNIX 目录快捷方式,例如 .(当前目录)或 ..(父级目录)。

  • 对于需要包含指向项目代码库外部的包含内容的旧版代码或 third_party 代码(例如,外部代码库包含的内容需添加前缀),请在 cc_library 规则目标上使用 include_prefixstrip_include_prefix 参数。