Regras
- cc_binary
- cc_import
- cc_library
- cc_proto_library
- fdo_prefetch_hints
- fdo_profile
- propeller_optimize
- cc_test
- cc_toolchain
- cc_toolchain_suite
cc_binary
cc_binary(name, deps, srcs, data, additional_linker_inputs, args, compatible_with, copts, defines, deprecation, distribs, env, exec_compatible_with, exec_properties, features, includes, licenses, linkopts, linkshared, linkstatic, local_defines, malloc, nocopts, output_licenses, restricted_to, stamp, tags, target_compatible_with, testonly, toolchains, visibility, win_def_file)
Destinos de saída implícitos
name.stripped
(criado apenas se solicitado explicitamente): uma versão removida. versão do binário.strip -g
é executado no binário para remover a depuração. símbolos. Outras opções de remoção podem ser fornecidas na linha de comando usando--stripopt=-foo
: Essa saída só é criada se solicitada explicitamente.name.dwp
(criado apenas se solicitado explicitamente): se A fissão está ativada: uma depuração. arquivo de pacote de informações adequado para depurar binários implantados remotamente. Caso contrário: um arquivo vazio.
Argumentos
Atributos | |
---|---|
name |
Um nome exclusivo para o destino. |
deps
|
Eles podem ser |
srcs
|
Todos os arquivos Um arquivo Todos os arquivos Se o nome de uma regra estiver em
Tipos de arquivo
e as regras que produzem esses arquivos. Extensões diferentes indicam linguagens de programação diferentes de acordo com a convenção de GCC. |
additional_linker_inputs
|
Por exemplo, arquivos .res compilados do Windows podem ser fornecidos aqui para serem incorporados em o destino binário. |
copts
|
Cada string nesse atributo é adicionada a
Se o pacote declarar o objeto feature
|
defines
|
-D como prefixo e foi adicionado à linha de comando de compilação desse destino.
e todas as regras que dependem dele. Tenha muito cuidado, pois isso pode ter
efeitos mais amplos. Em caso de dúvida, adicione valores definidos ao
local_defines .
|
includes
|
Sujeito à substituição "Make variables".
Cada string é prefixada com Os cabeçalhos precisam ser adicionados a srcs ou hdrs; caso contrário, eles não estarão disponíveis para os quando a compilação está no modo sandbox (o padrão). |
linkopts
|
LINKOPTS antes
ao vincular o destino binário.
Cada elemento dessa lista que não começa com |
linkshared
|
linkshared=True na sua regra. Por padrão
essa opção está desativada.
A presença dessa flag significa que a vinculação ocorre com a flag
Se você especificar |
linkstatic
|
cc_binary e
cc_test : vincular o binário na estática
modo Para cc_library.linkstatic : confira abaixo.
Por padrão, essa opção fica ativada para
Se ativada e for um binário ou teste, essa opção manda a ferramenta de build vincular
Sempre que possível, Existem três maneiras diferentes de vincular um executável:
O atributo
Se for |
local_defines
|
-D como prefixo e foi adicionado à linha de comando de compilação desse destino.
mas não aos dependentes.
|
malloc
|
Por padrão, os binários C++ são vinculados a |
nocopts
|
COPTS preexistente que corresponda a essa expressão regular
(incluindo os valores explicitamente especificados no atributo copts da regra) serão removidos dos
COPTS para compilar esta regra.
Esse atributo raramente será necessário.
|
stamp
|
Os binários carimbos não são recriados, a menos que as dependências deles mudem. |
win_def_file
|
Esse atributo só deve ser usado quando o Windows for a plataforma de destino. Ele pode ser usado para exportar símbolos durante a vinculação de uma biblioteca compartilhada. |
cc_import
cc_import(name, data, hdrs, alwayslink, compatible_with, deprecation, distribs, features, interface_library, licenses, restricted_to, shared_library, static_library, system_provided, tags, target_compatible_with, testonly, visibility)
As regras cc_import
permitem que os usuários importem bibliotecas C/C++ pré-compiladas.
Confira a seguir os casos de uso mais comuns:
1: Como vincular uma biblioteca estática
cc_import( name = "mylib", hdrs = ["mylib.h"], static_library = "libmylib.a", # If alwayslink is turned on, # libmylib.a will be forcely linked into any binary that depends on it. # alwayslink = 1, )
cc_import( name = "mylib", hdrs = ["mylib.h"], shared_library = "libmylib.so", )
cc_import( name = "mylib", hdrs = ["mylib.h"], # mylib.lib is a import library for mylib.dll which will be passed to linker interface_library = "mylib.lib", # mylib.dll will be available for runtime shared_library = "mylib.dll", )
system_provided=True
(Windows)
cc_import( name = "mylib", hdrs = ["mylib.h"], # mylib.lib is an import library for mylib.dll which will be passed to linker interface_library = "mylib.lib", # mylib.dll is provided by system environment, for example it can be found in PATH. # This indicates that Bazel is not responsible for making mylib.dll available. system_provided = 1, )
No Unix:
cc_import( name = "mylib", hdrs = ["mylib.h"], static_library = "libmylib.a", shared_library = "libmylib.so", ) # first will link to libmylib.a cc_binary( name = "first", srcs = ["first.cc"], deps = [":mylib"], linkstatic = 1, # default value ) # second will link to libmylib.so cc_binary( name = "second", srcs = ["second.cc"], deps = [":mylib"], linkstatic = 0, )
cc_import( name = "mylib", hdrs = ["mylib.h"], static_library = "libmylib.lib", # A normal static library interface_library = "mylib.lib", # An import library for mylib.dll shared_library = "mylib.dll", ) # first will link to libmylib.lib cc_binary( name = "first", srcs = ["first.cc"], deps = [":mylib"], linkstatic = 1, # default value ) # second will link to mylib.dll through mylib.lib cc_binary( name = "second", srcs = ["second.cc"], deps = [":mylib"], linkstatic = 0, )
Argumentos
Atributos | |
---|---|
name |
Um nome exclusivo para o destino. |
hdrs
|
|
alwayslink
|
Se o Alwayslink não funcionar com o VS 2017 no Windows, é devido a problema conhecido, faça upgrade do seu VS 2017 para a versão mais recente. |
interface_library
|
Tipos de arquivos permitidos:
|
shared_library
|
Tipos de arquivos permitidos:
|
static_library
|
Tipos de arquivos permitidos:
|
system_provided
|
interface_library deve ser especificado
shared_library deve estar vazio.
|
cc_library
cc_library(name, deps, srcs, data, hdrs, alwayslink, compatible_with, copts, defines, deprecation, distribs, exec_compatible_with, exec_properties, features, implementation_deps, include_prefix, includes, licenses, linkopts, linkstamp, linkstatic, local_defines, nocopts, restricted_to, strip_include_prefix, tags, target_compatible_with, testonly, textual_hdrs, toolchains, visibility, win_def_file)
Verificação da inclusão de cabeçalho
Todos os arquivos de cabeçalho usados no build precisam ser declarados nas APIs hdrs
ou
srcs
de cc_*
regras. Isso é obrigatório.
Para regras cc_library
, os cabeçalhos em hdrs
compreendem a interface pública do
biblioteca e pode ser incluído diretamente dos arquivos em hdrs
e
srcs
da própria biblioteca, bem como dos arquivos em hdrs
e
srcs
de cc_*
regras que listam a biblioteca no deps
.
Os cabeçalhos em srcs
só podem ser incluídos diretamente dos arquivos em hdrs
e srcs
da própria biblioteca. Ao decidir colocar um cabeçalho
hdrs
ou srcs
, pergunte se você quer os consumidores da biblioteca
para poder incluí-lo diretamente. Essa é praticamente a mesma decisão
Visibilidade de public
e private
nas linguagens de programação.
As regras cc_binary
e cc_test
não têm uma interface exportada, então
também não têm um atributo hdrs
. Todos os cabeçalhos que pertencem ao binário ou ao
diretamente serão listadas no srcs
.
Para ilustrar essas regras, veja o exemplo a seguir.
cc_binary( name = "foo", srcs = [ "foo.cc", "foo.h", ], deps = [":bar"], ) cc_library( name = "bar", srcs = [ "bar.cc", "bar-impl.h", ], hdrs = ["bar.h"], deps = [":baz"], ) cc_library( name = "baz", srcs = [ "baz.cc", "baz-impl.h", ], hdrs = ["baz.h"], )
As inclusões diretas permitidas neste exemplo estão listadas na tabela abaixo. Por exemplo:
foo.cc
tem permissão para incluir diretamente foo.h
e bar.h
, mas
não baz.h
.
Incluindo arquivo | Inclusões permitidas |
---|---|
foo.h | bar.h |
foo.cc | foo.h bar.h |
bar.h | bar-impl.h baz.h |
barra-impl.h | bar.h baz.h |
bar.cc | bar.h bar-impl.h baz.h |
baz.h | baz-impl.h |
baz-impl.h | baz.h |
baz.cc | baz.h baz-impl.h |
As regras de verificação de inclusão só se aplicam a eventos diretos
inclusões. No exemplo acima, foo.cc
pode
incluem bar.h
, que pode incluir baz.h
, que em
sua vez pode incluir baz-impl.h
. Tecnicamente, os
a compilação de um arquivo .cc
pode incluir transitivamente qualquer cabeçalho
no arquivo hdrs
ou srcs
na
qualquer cc_library
na interdição transitiva de deps
. Em
Nesse caso, o compilador pode ler baz.h
e baz-impl.h
.
ao compilar foo.cc
, mas foo.cc
não pode
contêm #include "baz.h"
. Para que isso seja
permitido, adicione baz
a deps
de foo
.
No momento, o Bazel não consegue distinguir entre direto e transitivo
inclusões, o que impede a detecção de casos de erro em que um arquivo inclui ilegalmente uma
que só pode ser incluído de forma transitiva. Por exemplo:
O Bazel não reclamaria se no exemplo acima foo.cc
diretamente
inclui baz.h
. Isso seria ilegal, porque foo
não depende diretamente de baz
. Atualmente, nenhum erro é gerado
Nesse caso, mas essa verificação de erros poderá ser adicionada no futuro.
Argumentos
Atributos | |
---|---|
name |
Um nome exclusivo para o destino. |
deps
|
Eles podem ser |
srcs
|
Todos os arquivos Um arquivo Todos os arquivos Se o nome de uma regra estiver em
Tipos de arquivo
e as regras que produzem esses arquivos. Extensões diferentes indicam linguagens de programação diferentes de acordo com a convenção de GCC. |
hdrs
|
Esse é o local mais recomendado para declarar arquivos de cabeçalho que
e descrever a interface da biblioteca. Esses cabeçalhos serão feitos
disponíveis para inclusão pelas origens nesta regra ou em regras dependentes.
Os cabeçalhos que não devem ser incluídos por um cliente desta biblioteca devem ser
no atributo |
alwayslink
|
srcs , mesmo que alguns não contenham símbolos referenciados pelo binário.
Isso é útil se o código não for chamado explicitamente por código em
o binário, por exemplo, caso seu código seja registrado para receber algum callback
por algum serviço.
Se o Alwayslink não funcionar com o VS 2017 no Windows, é devido a problema conhecido, faça upgrade do seu VS 2017 para a versão mais recente. |
copts
|
Cada string nesse atributo é adicionada a
Se o pacote declarar o objeto feature
|
defines
|
-D como prefixo e foi adicionado à linha de comando de compilação desse destino.
e todas as regras que dependem dele. Tenha muito cuidado, pois isso pode ter
efeitos mais amplos. Em caso de dúvida, adicione valores definidos ao
local_defines .
|
implementation_deps
|
deps , os cabeçalhos e os caminhos de inclusão dessas bibliotecas (e de todas
transitives) são usadas apenas para compilação dessa biblioteca, e não para bibliotecas que
dependerem disso. As bibliotecas especificadas com implementation_deps ainda estão vinculadas na
binários que dependem dessa biblioteca.
Por enquanto, o uso é limitado a cc_libraries e protegido pela sinalização.
|
include_prefix
|
Quando definido, os cabeçalhos no atributo O prefixo no atributo |
includes
|
Sujeito à substituição "Make variables".
Cada string é prefixada com Os cabeçalhos precisam ser adicionados a srcs ou hdrs; caso contrário, eles não estarão disponíveis para os quando a compilação está no modo sandbox (o padrão). |
linkopts
|
LINKOPTS antes
ao vincular o destino binário.
Cada elemento dessa lista que não começa com |
linkstamp
|
base .
|
linkstatic
|
cc_binary e
cc_test : vincular o binário na estática
modo Para cc_library.linkstatic : confira abaixo.
Por padrão, essa opção fica ativada para
Se ativada e for um binário ou teste, essa opção manda a ferramenta de build vincular
Sempre que possível, Existem três maneiras diferentes de vincular um executável:
O atributo
Se for |
local_defines
|
-D como prefixo e foi adicionado à linha de comando de compilação desse destino.
mas não aos dependentes.
|
nocopts
|
COPTS preexistente que corresponda a essa expressão regular
(incluindo os valores explicitamente especificados no atributo copts da regra) serão removidos dos
COPTS para compilar esta regra.
Esse atributo raramente será necessário.
|
strip_include_prefix
|
Quando definido, os cabeçalhos no atributo Se for um caminho relativo, ele será considerado como relativo ao pacote. Se for absoluta, ela é entendida como um caminho relativo ao repositório. O prefixo no atributo |
textual_hdrs
|
Esse é o local para declarar os arquivos de cabeçalho que não podem ser compilados sozinhos. ou seja, eles sempre precisam ser incluídos textualmente por outros arquivos-fonte para criar versões válidas o código-fonte. |
win_def_file
|
Esse atributo só deve ser usado quando o Windows for a plataforma de destino. Ele pode ser usado para exportar símbolos durante a vinculação de uma biblioteca compartilhada. |
cc_proto_library
cc_proto_library(name, deps, data, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, features, licenses, restricted_to, tags, target_compatible_with, testonly, visibility)
cc_proto_library
gera código C++ de arquivos .proto
.
deps
precisa apontar para regras proto_library
.
Exemplo:
cc_library( name = "lib", deps = [":foo_cc_proto"], ) cc_proto_library( name = "foo_cc_proto", deps = [":foo_proto"], ) proto_library( name = "foo_proto", )
Argumentos
Atributos | |
---|---|
name |
Um nome exclusivo para o destino. |
deps
|
proto_library
para gerar código C++.
|
fdo_prefetch_hints
fdo_prefetch_hints(name, compatible_with, deprecation, distribs, features, licenses, profile, restricted_to, tags, target_compatible_with, testonly, visibility)
Representa um perfil de dicas de pré-busca do FDO que está no espaço de trabalho ou em um caminho absoluto. Exemplos:
fdo_prefetch_hints( name = "hints", profile = "//path/to/hints:profile.afdo", ) fdo_profile( name = "hints_abs", absolute_path_profile = "/absolute/path/profile.afdo", )
Argumentos
Atributos | |
---|---|
name |
Um nome exclusivo para o destino. |
profile
|
|
fdo_profile
fdo_profile(name, absolute_path_profile, compatible_with, deprecation, distribs, features, licenses, profile, proto_profile, restricted_to, tags, target_compatible_with, testonly, visibility)
Representa um perfil do FDO que está no espaço de trabalho ou em um caminho absoluto especificado. Exemplos:
fdo_profile( name = "fdo", profile = "//path/to/fdo:profile.zip", ) fdo_profile( name = "fdo_abs", absolute_path_profile = "/absolute/path/profile.zip", )
Argumentos
Atributos | |
---|---|
name |
Um nome exclusivo para o destino. |
absolute_path_profile
|
|
profile
|
|
proto_profile
|
|
propeller_optimize
propeller_optimize(name, compatible_with, deprecation, distribs, features, ld_profile, licenses, restricted_to, tags, target_compatible_with, testonly, visibility)
Representa um perfil de otimização de hélice no espaço de trabalho. Exemplo:
propeller_optimize( name = "layout", cc_profile = "//path:cc_profile.txt", ld_profile = "//path:ld_profile.txt" ) propeller_optimize( name = "layout_absolute", absolute_cc_profile = "/absolute/cc_profile.txt", absolute_ld_profile = "/absolute/ld_profile.txt" )
Argumentos
Atributos | |
---|---|
name |
Um nome exclusivo para o destino. |
ld_profile
|
|
cc_test
cc_test(name, deps, srcs, data, additional_linker_inputs, args, compatible_with, copts, defines, deprecation, distribs, env, env_inherit, exec_compatible_with, exec_properties, features, flaky, includes, licenses, linkopts, linkstatic, local, local_defines, malloc, nocopts, restricted_to, shard_count, size, stamp, tags, target_compatible_with, testonly, timeout, toolchains, visibility, win_def_file)
Argumentos
Atributos | |
---|---|
name |
Um nome exclusivo para o destino. |
deps
|
Eles podem ser |
srcs
|
Todos os arquivos Um arquivo Todos os arquivos Se o nome de uma regra estiver em
Tipos de arquivo
e as regras que produzem esses arquivos. Extensões diferentes indicam linguagens de programação diferentes de acordo com a convenção de GCC. |
additional_linker_inputs
|
Por exemplo, arquivos .res compilados do Windows podem ser fornecidos aqui para serem incorporados em o destino binário. |
copts
|
Cada string nesse atributo é adicionada a
Se o pacote declarar o objeto feature
|
defines
|
-D como prefixo e foi adicionado à linha de comando de compilação desse destino.
e todas as regras que dependem dele. Tenha muito cuidado, pois isso pode ter
efeitos mais amplos. Em caso de dúvida, adicione valores definidos ao
local_defines .
|
includes
|
Sujeito à substituição "Make variables".
Cada string é prefixada com Os cabeçalhos precisam ser adicionados a srcs ou hdrs; caso contrário, eles não estarão disponíveis para os quando a compilação está no modo sandbox (o padrão). |
linkopts
|
LINKOPTS antes
ao vincular o destino binário.
Cada elemento dessa lista que não começa com |
linkstatic
|
cc_binary e
cc_test : vincular o binário na estática
modo Para cc_library.linkstatic : confira abaixo.
Por padrão, essa opção fica ativada para
Se ativada e for um binário ou teste, essa opção manda a ferramenta de build vincular
Sempre que possível, Existem três maneiras diferentes de vincular um executável:
O atributo
Se for |
local_defines
|
-D como prefixo e foi adicionado à linha de comando de compilação desse destino.
mas não aos dependentes.
|
malloc
|
Por padrão, os binários C++ são vinculados a |
nocopts
|
COPTS preexistente que corresponda a essa expressão regular
(incluindo os valores explicitamente especificados no atributo copts da regra) serão removidos dos
COPTS para compilar esta regra.
Esse atributo raramente será necessário.
|
stamp
|
Os binários carimbos não são recriados, a menos que as dependências deles mudem. |
win_def_file
|
Esse atributo só deve ser usado quando o Windows for a plataforma de destino. Ele pode ser usado para exportar símbolos durante a vinculação de uma biblioteca compartilhada. |
cc_toolchain
cc_toolchain(name, all_files, ar_files, as_files, compatible_with, compiler, compiler_files, compiler_files_without_includes, coverage_files, cpu, deprecation, distribs, dwp_files, dynamic_runtime_lib, exec_transition_for_inputs, features, libc_top, licenses, linker_files, module_map, objcopy_files, restricted_to, static_runtime_lib, strip_files, supports_header_parsing, supports_param_files, tags, target_compatible_with, testonly, toolchain_config, toolchain_identifier, visibility)
Representa um conjunto de ferramentas C++.
Essa regra é responsável por:
-
Coletar todos os artefatos necessários para que as ações C++ sejam executadas. Isso é feito pela
atributos como
all_files
,compiler_files
,linker_files
ou outros atributos terminados em_files
). São geralmente são grupos de arquivos que contêm todos os arquivos necessários. -
Geração de linhas de comando corretas para ações C++. Para isso, usamos
CcToolchainConfigInfo
provedor (detalhes abaixo).
Use o atributo toolchain_config
para configurar o conjunto de ferramentas do C++.
Consulte também este
página
para ver a documentação elaborada sobre a configuração do conjunto de ferramentas C++ e a seleção do conjunto de ferramentas.
Usar tags = ["manual"]
para impedir que os conjuntos de ferramentas sejam criados e configurados
desnecessariamente ao invocar bazel build //...
Argumentos
Atributos | |
---|---|
name |
Um nome exclusivo para o destino. |
all_files
|
all_files é um superconjunto
de todos os outros atributos que fornecem artefatos (por exemplo, a compilação do linktamp precisa ser compilada
e arquivos de link, o que leva all_files ).
Isso é o que |
ar_files
|
Coleção de todos os artefatos cc_Dataset necessários para ações de arquivamento. |
as_files
|
Coleção de todos os artefatos cc_Dataset necessários para ações de montagem. |
compiler
|
toolchain_identifier . Vai ser um ambiente autônomo
depois
Migração da CROSSTOOL para o Starlark
, e será removido por
7075 (link em inglês).
Quando definida, ela será usada para executar a seleção crosstool_config.Dataset. Levará precedência sobre a opção --cpu Bazel. |
compiler_files
|
|
compiler_files_without_includes
|
|
coverage_files
|
|
cpu
|
Quando definida, ela será usada para executar a seleção crosstool_config.Dataset. Levará precedência sobre a opção --cpu Bazel. |
dwp_files
|
|
dynamic_runtime_lib
|
Vai ser usado quando "static_link_cpp_runtimes" está ativado e estamos vinculando dependências de maneira dinâmica. |
exec_transition_for_inputs
|
|
libc_top
|
|
linker_files
|
|
module_map
|
|
objcopy_files
|
|
static_runtime_lib
|
Vai ser usado quando "static_link_cpp_runtimes" está ativado e estamos vinculando dependências estaticamente. |
strip_files
|
|
supports_header_parsing
|
|
supports_param_files
|
|
toolchain_config
|
cc_toolchain_config_info .
|
toolchain_identifier
|
Até que o problema 5380 seja corrigido
essa é a forma recomendada de associar |
cc_toolchain_suite
cc_toolchain_suite(name, compatible_with, deprecation, distribs, features, licenses, restricted_to, tags, target_compatible_with, testonly, toolchains, visibility)
Representa uma coleção de conjuntos de ferramentas C++.
Essa regra é responsável por:
- coletar todos os conjuntos de ferramentas de C++ relevantes;
-
Como selecionar um conjunto de ferramentas dependendo das opções
--cpu
e--compiler
passados para o Bazel.
Consulte também este página para ver a documentação elaborada sobre a configuração do conjunto de ferramentas C++ e a seleção do conjunto de ferramentas.
Argumentos
Atributos | |
---|---|
name |
Um nome exclusivo para o destino. |
toolchains
|
cc_toolchain . "<CPU>" será usado quando apenas --cpu
é passado para o Bazel e "<cpu>|<compiler>" será usado quando
--cpu e --compiler são transmitidos para o Bazel. Exemplo:
cc_toolchain_suite( name = "toolchain", toolchains = { "piii|gcc": ":my_cc_toolchain_for_piii_using_gcc", "piii": ":my_cc_toolchain_for_piii_using_default_compiler", }, ) |