En esta página, se incluyen recursos que te ayudan a usar Bazel con proyectos de C++. Se vincula a un instructivo, reglas de compilación y otra información específica para compilar proyectos de C++ con Bazel.
Trabaja con Bazel
Los siguientes recursos te ayudarán a trabajar con Bazel en proyectos de C++:
- Instructivo: Cómo compilar un proyecto de C++
- Casos de uso habituales de C++
- Reglas de C/C++
- Bibliotecas esenciales
- Configuración de la cadena de herramientas de C++
- Instructivo: Cómo configurar cadenas de herramientas de C++
- Integración con reglas de C++
Prácticas recomendadas
Además de las prácticas recomendadas generales de Bazel, a continuación se incluyen prácticas recomendadas específicas para proyectos de C++.
Archivos BUILD
Sigue los lineamientos que se indican a continuación cuando crees tus archivos BUILD:
- Cada archivo - BUILDdebe contener un destino de regla- cc_librarypor unidad de compilación en el directorio.
- Debes granularizar tus bibliotecas de C++ lo más posible para maximizar la incrementalidad y paralelizar la compilación. 
- Si hay un solo archivo fuente en - srcs, asigna a la biblioteca el mismo nombre que el de ese archivo C++. Esta biblioteca debe contener archivos C++, archivos de encabezado coincidentes y las dependencias directas de la biblioteca. Por ejemplo:- cc_library( name = "mylib", srcs = ["mylib.cc"], hdrs = ["mylib.h"], deps = [":lower-level-lib"] )
- Usa un destino de regla - cc_testpor cada destino- cc_libraryen el archivo. Asigna el nombre- [library-name]_testal destino y- [library-name]_test.ccal archivo fuente. Por ejemplo, un destino de prueba para el destino de biblioteca- mylibque se muestra arriba se vería de la siguiente manera:- cc_test( name = "mylib_test", srcs = ["mylib_test.cc"], deps = [":mylib"] )
Incluir rutas
Sigue estos lineamientos para las rutas de inclusión:
- Haz que todas las rutas de inclusión sean relativas al directorio del espacio de trabajo. 
- Usa includes entre comillas ( - #include "foo/bar/baz.h") para los encabezados que no son del sistema, no corchetes angulares (- #include <foo/bar/baz.h>).
- Evita usar atajos de directorio de UNIX, como - .(directorio actual) o- ..(directorio principal).
- Para el código heredado o - third_partyque requiere que las inclusiones apunten fuera del repositorio del proyecto, como las inclusiones de repositorios externos que requieren un prefijo, usa los argumentos- include_prefixy- strip_include_prefixen el destino de la regla- cc_library.
Funciones de la cadena de herramientas
Las siguientes funciones opcionales pueden mejorar la higiene de un proyecto de C++. Se pueden habilitar con la marca de línea de comandos --features o el atributo features de las reglas repo, package o cc_*:
- La función parse_headershace que el compilador de C++ se use para analizar (pero no compilar) todos los archivos de encabezado en los destinos compilados y sus dependencias cuando se usa la marca--process_headers_in_dependencies. Esto puede ayudar a detectar problemas en las bibliotecas de solo encabezado y garantizar que los encabezados sean autónomos y no dependan del orden en que se incluyen.
- La función layering_checkexige que los destinos solo incluyan encabezados proporcionados por sus dependencias directas. La cadena de herramientas predeterminada admite esta función en Linux conclangcomo compilador.