本页面包含可帮助您将 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 目录快捷方式,例如
.(当前目录)或..(父目录)。对于需要指向项目代码库外部的 include(例如需要前缀的外部代码库 include)的旧版或
third_party代码,请对cc_library规则目标使用include_prefix和strip_include_prefix实参。
工具链功能
以下可选功能
可以提高 C++ 项目的卫生性。可以使用
--features 命令行标志或 features 属性启用这些功能:repopackagecc_*
parse_headers功能会使 C++ 编译器用于解析 (但不编译)构建目标及其依赖项中的所有头文件 使用--process_headers_in_dependencies标志时。这有助于捕获仅包含头文件的库中的问题,并确保 头文件是自包含的,并且与包含它们的顺序无关。layering_check功能强制目标仅包含其直接依赖项提供的头文件 。默认工具链在 Linux 上支持此 功能,并使用clang作为编译器。