Esta página contém recursos que ajudam você a usar o Bazel com projetos em C++. Ele tem um link para um tutorial, regras de build e outras informações específicas sobre a criação de projetos em C++ com o Bazel.
Como trabalhar com o Bazel
Os recursos a seguir ajudam você a trabalhar com o Bazel em projetos C++:
- Tutorial: como criar um projeto em C++
- Casos de uso comuns do C++
- Regras de C/C++
- Bibliotecas essenciais
- Configuração da cadeia de ferramentas do C++
- Tutorial: como configurar toolchains do C++
- Integração com regras do C++
Práticas recomendadas
Além das práticas recomendadas gerais do Bazel, confira abaixo as práticas recomendadas específicas para projetos em C++.
Arquivos BUILD
Siga as diretrizes abaixo ao criar seus arquivos BUILD:
- Cada arquivo - BUILDprecisa conter uma- cc_libraryde regra por unidade de compilação no diretório.
- Granularize suas bibliotecas C++ o máximo possível para maximizar a incrementalidade e paralelizar o build. 
- Se houver um único arquivo de origem em - srcs, nomeie a biblioteca da mesma forma que o nome do arquivo C++. Essa biblioteca precisa conter arquivos C++, arquivos de cabeçalho correspondentes e as dependências diretas da biblioteca. Exemplo:- cc_library( name = "mylib", srcs = ["mylib.cc"], hdrs = ["mylib.h"], deps = [":lower-level-lib"] )
- Use um destino de regra - cc_testpor destino- cc_libraryno arquivo. Nomeie o destino- [library-name]_teste o arquivo de origem- [library-name]_test.cc. Por exemplo, um destino de teste para o destino da biblioteca- mylibmostrado acima seria assim:- cc_test( name = "mylib_test", srcs = ["mylib_test.cc"], deps = [":mylib"] )
Incluir caminhos
Siga estas diretrizes para caminhos de inclusão:
- Faça com que todos os caminhos de inclusão sejam relativos ao diretório do espaço de trabalho. 
- Use inclusões entre aspas ( - #include "foo/bar/baz.h") para cabeçalhos que não são do sistema, não colchetes angulares (- #include <foo/bar/baz.h>).
- Evite usar atalhos de diretório do UNIX, como - .(diretório atual) ou- ..(diretório pai).
- Para código legado ou - third_partyque exige inclusões apontando para fora do repositório do projeto, como inclusões de repositório externo que exigem um prefixo, use os argumentos- include_prefixe- strip_include_prefixno destino da regra- cc_library.
Recursos do conjunto de ferramentas
Os seguintes recursos opcionais
podem melhorar a higiene de um projeto em C++. Eles podem ser ativados usando a
sinalização de linha de comando --features ou o atributo features das regras
repo,
package ou cc_*:
- O recurso parse_headersfaz com que o compilador C++ seja usado para analisar (mas não compilar) todos os arquivos de cabeçalho nos destinos criados e suas dependências ao usar a flag--process_headers_in_dependencies. Isso pode ajudar a detectar problemas em bibliotecas somente de cabeçalho e garantir que os cabeçalhos sejam independentes e não dependam da ordem em que são incluídos.
- O recurso layering_checkexige que os destinos incluam apenas cabeçalhos fornecidos pelas dependências diretas. O conjunto de ferramentas padrão é compatível com esse recurso no Linux comclangcomo compilador.