Esta página contiene recursos que te ayudarán a usar Bazel con proyectos de C++. Vincula a un instructivo, reglas de compilación y otra información específica de la compilación de C++ proyectos con Bazel.
Cómo trabajar con Bazel
Los siguientes recursos te ayudarán a trabajar con Bazel en proyectos de C++:
- Instructivo: Compila un proyecto de C++
- Casos de uso comunes de C++
- Reglas de C/C++
- Bibliotecas esenciales
- Configuración de la cadena de herramientas de C++
- Instructivo: Configura cadenas de herramientas de C++
- Integración con reglas de C++
Prácticas recomendadas
Además de las prácticas recomendadas generales sobre Bazel, a continuación se incluyen las siguientes: prácticas recomendadas específicas de los proyectos de C++.
Archivos de BUILD
Sigue los lineamientos que se indican a continuación cuando crees tus archivos BUILD:
Cada archivo
BUILD
debe contener uncc_library
. el destino de la regla por unidad de compilación en el directorio.Debes detallar las bibliotecas de C++ tanto como como sea posible para maximizar la incrementalidad y paralelizar la compilación.
Si hay un solo archivo de origen en
srcs
, asígnale el mismo nombre a la biblioteca el nombre de ese archivo C++. Esta biblioteca debe contener archivos C++, cualquier coincidencia archivos de encabezado 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_test
por objetivocc_library
en el archivo. Asigna un nombre al el[library-name]_test
de destino y el archivo de origen[library-name]_test.cc
. Por ejemplo, un destino de prueba para el destino de la bibliotecamylib
que se mostró anteriormente verse así: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 estén relacionadas con el directorio del lugar de trabajo.
Usa inclusiones entrecomilladas (
#include "foo/bar/baz.h"
) para encabezados que no sean del sistema, no corchetes angulares (#include <foo/bar/baz.h>
).Evita usar combinaciones de teclas del directorio de UNIX, como
.
(directorio actual) o..
(directorio principal).Para el código heredado o
third_party
que requiere que apuntes fuera del de un repositorio de proyecto, como incluir un repositorio externo que requiere un prefijo, usainclude_prefix
ystrip_include_prefix
en el destino de la reglacc_library
.
Funciones de la cadena de herramientas
Las siguientes funciones opcionales
puede mejorar el funcionamiento de un proyecto de C++. Se pueden habilitar con
marca de línea de comandos --features
o el atributo features
de
repo
:
Reglas package
o cc_*
:
- La función
parse_headers
permite usar el compilador C++ para analizar datos. (pero no compilar) todos los archivos de encabezado en los destinos compilados y sus dependencias cuando uses--process_headers_in_dependencies
marca. Esto puede ayudar a detectar problemas en las bibliotecas de solo encabezado y garantizar que los encabezados son independientes y no dependen del orden en que incluidos. - La función
layering_check
exige que los destinos solo incluyan encabezados proporcionados por sus dependencias directas. La cadena de herramientas predeterminada admite lo siguiente: en Linux conclang
como compilador.