C++ e Bazel

Informar um problema Ver código-fonte Nightly · 7.4 . 7.3 · 7.2 · 7.1 · 7.0 · 6.5

Esta página contém recursos que ajudam você a usar o Bazel com projetos C++. Ele vincula a um tutorial, regras de build e outras informações específicas para criar projetos C++ com o Bazel.

Como trabalhar com o Bazel

Os recursos a seguir vão ajudar você a trabalhar com o Bazel em projetos C++:

Práticas recomendadas

Além das práticas recomendadas gerais do Bazel, confira abaixo práticas recomendadas específicas para projetos C++.

Arquivos BUILD

Siga as diretrizes abaixo ao criar seus arquivos BUILD:

  • Cada arquivo BUILD precisa conter um destino de regra cc_library por unidade de compilação no diretório.

  • É necessário granularizar 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 com o mesmo nome do arquivo C++. Essa biblioteca precisa conter arquivos C++, todos os 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_test por destino cc_library no arquivo. Nomeie o destino [library-name]_test e o arquivo de origem [library-name]_test.cc. Por exemplo, um destino de teste para o destino da biblioteca mylib mostrado acima ficaria assim:

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

Incluir caminhos

Siga estas diretrizes para incluir caminhos:

  • Faça com que todos os caminhos de inclusão sejam relativos ao diretório do espaço de trabalho.

  • Use aspas (#include "foo/bar/baz.h") para cabeçalhos que não são do sistema, não use colchetes (#include <foo/bar/baz.h>).

  • Evite usar atalhos de diretório do UNIX, como . (diretório atual) ou .. (diretório pai).

  • Para códigos third_party legados ou que exigem que o include aponte para fora do repositório do projeto, como o include do repositório externo que exige um prefixo, use os argumentos include_prefix e strip_include_prefix no destino da regra cc_library.

Recursos da cadeia de ferramentas

Os recursos opcionais a seguir podem melhorar a higiene de um projeto C++. Elas podem ser ativadas usando a flag de linha de comando --features ou o atributo features das regras repo, package ou cc_*:

  • O recurso parse_headers faz com que o compilador C++ seja usado para analisar (mas não compilar) todos os arquivos de cabeçalho nos destinos criados e nas dependências deles 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 independentes da ordem em que são incluídos.
  • O recurso layering_check garante que os destinos incluam apenas cabeçalhos fornecidos pelas dependências diretas. O conjunto de ferramentas padrão oferece suporte a esse recurso no Linux com clang como o compilador.