Regras
- cc_binary
- cc_import (em inglês)
- cc_library
- cc_proto_library (em inglês)
- cc_shared_library (em inglês)
- fdo_prefetch_hints .
- fdo_profile
- propeller_optimize
- cc_test
- cc_toolchain
- cc_toolchain_suite
cc_binário
Ver origem da regracc_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ícita
name.stripped
(criado apenas se solicitado explicitamente): uma versão removida do binário.strip -g
é executado no binário para remover os símbolos de depuração. Outras opções de faixa podem ser fornecidas na linha de comando usando--stripopt=-foo
. Essa saída só é criada se explicitamente solicitada.name.dwp
(criado apenas se solicitado explicitamente): se a Fission estiver ativada: um arquivo de pacote de informações de depuração adequado para depurar binários implantados remotamente. Caso contrário: um arquivo vazio.
Argumentos
Atributos | |
---|---|
name |
Um nome exclusivo para este destino. |
deps
|
Podem ser destinos |
srcs
|
Todos os arquivos Um arquivo Todos os arquivos Se o nome de uma regra estiver em
...e qualquer regra que produza esses arquivos. Diferentes extensões indicam diferentes linguagens de programação de acordo com a convenção do GCC. |
additional_linker_inputs
|
Por exemplo, arquivos compilados do Windows .res podem ser fornecidos aqui para serem incorporados ao destino binário. |
copts
|
Cada string nesse atributo é adicionada à ordem especificada em
Se o pacote declarar o recurso
|
defines
|
-D e adicionada à linha de comando de compilação dessa meta, bem como a todas as regras que dependem dela. Tenha muito cuidado, já que isso pode ter
efeitos de longo alcance. Em caso de dúvida, adicione valores definidos a local_defines .
|
includes
|
Sujeito à substituição "Criar variável".
Cada string é precedida por Os cabeçalhos precisam ser adicionados a srcs ou hdrs. Caso contrário, eles não estarão disponíveis para regras dependentes quando a compilação for colocada em sandbox (o padrão). |
linkopts
|
LINKOPTS antes de 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 fica desativada.
A presença dessa sinalização significa que a vinculação ocorre com a sinalização
Se você especificar |
linkstatic
|
cc_binary e cc_test : vincule o binário no modo estático. Para cc_library.linkstatic : veja abaixo.
Por padrão, essa opção está ativada para
Se ativada e for um binário ou teste, essa opção solicitará que a ferramenta de compilação seja vinculada a Existem três maneiras diferentes de vincular um executável:
O atributo
Se for |
local_defines
|
-D e adicionada à linha de comando de compilação para esse destino, mas não aos dependentes.
|
malloc
|
Por padrão, os binários C++ são vinculados ao |
nocopts
|
COPTS preexistente que corresponda a essa expressão regular (incluindo valores explicitamente especificados no atributo copts da regra) será removido de COPTS para compilar essa regra.
Esse atributo raramente é necessário.
|
stamp
|
Os binários carimbados não são recriados, a menos que as dependências mudem. |
win_def_file
|
Esse atributo só deve ser usado quando o Windows é a plataforma de destino. Ele pode ser usado para exportar símbolos durante a vinculação de uma biblioteca compartilhada. |
importação_cc
Ver origem da regracc_import(name, deps, 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.
Veja a seguir os casos de uso típicos:
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, )2. Como vincular uma biblioteca compartilhada (Unix)
cc_import( name = "mylib", hdrs = ["mylib.h"], shared_library = "libmylib.so", )3. Como vincular uma biblioteca compartilhada à biblioteca de interfaces (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 will be available for runtime shared_library = "mylib.dll", )4. Como vincular uma biblioteca compartilhada ao
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, )5. Como vincular a uma biblioteca estática ou compartilhada
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, )No Windows:
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, )
cc_import
é compatível com um atributo de inclusão. Por exemplo:cc_import( name = "curl_lib", hdrs = glob(["vendor/curl/include/curl/*.h"]), includes = [ "vendor/curl/include" ], shared_library = "vendor/curl/lib/.libs/libcurl.dylib", )
Argumentos
Atributos | |
---|---|
name |
Um nome exclusivo para este destino. |
deps
|
deps em Atributos típicos definidos pela maioria das regras de compilação.
|
hdrs
|
|
alwayslink
|
Se o Alwayslink não funcionar com o VS 2017 no Windows devido a um 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 precisa ser especificado e shared_library precisa estar vazio.
|
biblioteca cc
Ver origem da regracc_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 na compilação precisam ser declarados nas regras hdrs
ou srcs
de cc_*
. Isso é obrigatório.
Para regras cc_library
, os cabeçalhos em hdrs
compreendem a interface pública da biblioteca e podem ser incluídos diretamente dos arquivos em hdrs
e srcs
da própria biblioteca, bem como de arquivos em hdrs
e srcs
de regras cc_*
que listam a biblioteca em deps
.
Os cabeçalhos em srcs
só podem ser incluídos diretamente dos arquivos em hdrs
e srcs
da própria biblioteca. Ao decidir se você quer inserir um cabeçalho em hdrs
ou srcs
, pergunte se quer que os consumidores dessa biblioteca possam incluí-la diretamente. Essa é quase a mesma decisão entre a visibilidade de public
e private
em linguagens de programação.
As regras cc_binary
e cc_test
não têm uma interface exportada e, portanto, também não têm um atributo hdrs
. Todos os cabeçalhos que pertencem ao binário ou ao teste precisam ser listados diretamente 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
pode incluir foo.h
e bar.h
diretamente, 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 |
bar-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 se aplicam somente a inclusões
diretas. No exemplo acima, foo.cc
pode incluir bar.h
, que pode incluir baz.h
, que por sua vez pode incluir baz-impl.h
. Tecnicamente, a compilação de um arquivo .cc
pode incluir transitivamente qualquer arquivo de cabeçalho em hdrs
ou srcs
em qualquer cc_library
no fechamento deps
transitivo. Nesse caso, o compilador pode ler baz.h
e baz-impl.h
ao compilar foo.cc
, mas foo.cc
não pode conter #include "baz.h"
. Para que isso seja permitido, é preciso adicionar baz
ao deps
de foo
.
O Bazel depende do suporte do conjunto de ferramentas para aplicar as regras de verificação de inclusão.
O recurso layering_check
precisa ser compatível com o conjunto de ferramentas e ser solicitado explicitamente, por exemplo, por meio da sinalização de linha de comando --features=layering_check
ou do parâmetro features
da função package
. Os conjuntos de ferramentas fornecidos pelo Bazel só são compatíveis com esse recurso com clang no Unix e no macOS.
Argumentos
Atributos | |
---|---|
name |
Um nome exclusivo para este destino. |
deps
|
Podem ser destinos |
srcs
|
Todos os arquivos Um arquivo Todos os arquivos Se o nome de uma regra estiver em
...e qualquer regra que produza esses arquivos. Diferentes extensões indicam diferentes linguagens de programação de acordo com a convenção do GCC. |
hdrs
|
Esse é o local preferencial para declarar arquivos de cabeçalho que descrevem a interface da biblioteca. Esses cabeçalhos serão disponibilizados para inclusão por fontes nesta regra ou em regras dependentes.
Os cabeçalhos que não podem ser incluídos por um cliente dessa biblioteca precisam ser
listados no atributo |
alwayslink
|
srcs , mesmo que alguns não contenham símbolos referenciados pelo binário.
Isso será útil se seu código não for explicitamente chamado por código no binário, por exemplo, se ele for registrado para receber algum retorno de chamada fornecido por algum serviço.
Se o Alwayslink não funcionar com o VS 2017 no Windows devido a um problema conhecido, faça upgrade do seu VS 2017 para a versão mais recente. |
copts
|
Cada string nesse atributo é adicionada à ordem especificada em
Se o pacote declarar o recurso
|
defines
|
-D e adicionada à linha de comando de compilação dessa meta, bem como a todas as regras que dependem dela. Tenha muito cuidado, já que isso pode ter
efeitos de longo alcance. Em caso de dúvida, adicione valores definidos a local_defines .
|
implementation_deps
|
deps , os cabeçalhos e os caminhos de inclusão dessas bibliotecas (e todas as dependências transitivas) são usados apenas para a compilação dessa biblioteca, e não bibliotecas que dependem dela. As bibliotecas especificadas com implementation_deps ainda estão vinculadas em destinos binários que dependem dessa biblioteca.
Por enquanto, o uso é limitado a cc_libraries e protegido pela sinalização |
include_prefix
|
Quando configurados, os cabeçalhos no atributo O prefixo no atributo |
includes
|
Sujeito à substituição "Criar variável".
Cada string é precedida por Os cabeçalhos precisam ser adicionados a srcs ou hdrs. Caso contrário, eles não estarão disponíveis para regras dependentes quando a compilação for colocada em sandbox (o padrão). |
linkopts
|
LINKOPTS antes de vincular o destino binário.
Cada elemento dessa lista que não começa com |
linkstamp
|
base .
|
linkstatic
|
cc_binary e cc_test : vincule o binário no modo estático. Para cc_library.linkstatic : veja abaixo.
Por padrão, essa opção está ativada para
Se ativada e for um binário ou teste, essa opção solicitará que a ferramenta de compilação seja vinculada a Existem três maneiras diferentes de vincular um executável:
O atributo
Se for |
local_defines
|
-D e adicionada à linha de comando de compilação para esse destino, mas não aos dependentes.
|
nocopts
|
COPTS preexistente que corresponda a essa expressão regular (incluindo valores explicitamente especificados no atributo copts da regra) será removido de COPTS para compilar essa regra.
Esse atributo raramente é necessário.
|
strip_include_prefix
|
Quando definidos, os cabeçalhos no atributo Se for um caminho relativo, ele será considerado relativo ao pacote. Se for absoluto, será entendido como um caminho relativo a repositório. O prefixo no atributo |
textual_hdrs
|
Esse é o local para declarar arquivos de cabeçalho que não podem ser compilados por conta própria, ou seja, eles sempre precisam ser incluídos textualmente por outros arquivos de origem para criar um código válido. |
win_def_file
|
Esse atributo só deve ser usado quando o Windows é a plataforma de destino. Ele pode ser usado para exportar símbolos durante a vinculação de uma biblioteca compartilhada. |
cc_proto_library
Ver origem da regracc_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 este destino. |
deps
|
proto_library para as quais gerar código C++.
|
biblioteca compartilhada_cc
Ver origem da regracc_shared_library(name, deps, additional_linker_inputs, dynamic_deps, exports_filter, shared_lib_name, tags, user_link_flags, win_def_file)
Ele produz uma biblioteca compartilhada.
Exemplo
cc_shared_library( name = "foo_shared", deps = [ ":foo", ], dynamic_deps = [ ":bar_shared", ], additional_linker_inputs = [ ":foo.lds", ], user_link_flags = [ "-Wl,--version-script=$(location :foo.lds)", ], ) cc_library( name = "foo", srcs = ["foo.cc"], hdrs = ["foo.h"], deps = [ ":bar", ":baz", ], ) cc_shared_library( name = "bar_shared", shared_lib_name = "bar.so", deps = [":bar"], ) cc_library( name = "bar", srcs = ["bar.cc"], hdrs = ["bar.h"], ) cc_library( name = "baz", srcs = ["baz.cc"], hdrs = ["baz.h"], )
No exemplo, foo_shared
vincula estaticamente foo
e baz
, sendo esta última uma dependência transitiva. Ele não
vincula bar
porque já é fornecido dinamicamente pelo
dynamic_dep
bar_shared
.
foo_shared
usa um arquivo *.lds de script do vinculador para controlar quais símbolos precisam ser exportados. A lógica de regra cc_shared_library
não controla quais símbolos são exportados. Ela só usa o que é considerado exportado para dar erros durante a fase de análise se duas bibliotecas compartilhadas exportam os mesmos destinos.
Cada dependência direta de cc_shared_library
é considerada exportada. Portanto, o Bazel supõe durante a análise que foo
está sendo exportado por foo_shared
. baz
não é considerado exportado
por foo_shared
. Todos os destinos correspondentes ao exports_filter
também são exportados.
Cada cc_library
no exemplo aparecerá no máximo em uma
cc_shared_library
. Se quisermos vincular baz
também a
bar_shared
, precisaremos adicionar
tags = ["LINKABLE_MORE_THAN_ONCE"]
a baz
.
Devido ao atributo shared_lib_name
, o arquivo produzido por bar_shared
terá o nome bar.so
em oposição ao nome libbar.so
que ele teria por padrão no Linux.
Erros
Two shared libraries in dependencies export the same symbols.
Isso acontecerá sempre que você estiver criando um destino com duas dependências cc_shared_library
diferentes que exportam o mesmo destino. Para corrigir isso, é necessário interromper a exportação das bibliotecas em uma das dependências cc_shared_library
.
Two shared libraries in dependencies link the same library statically
Isso acontece sempre que você cria um novo cc_shared_library
com duas
dependências cc_shared_library
diferentes que vinculam o mesmo destino estaticamente.
Semelhante ao erro com exportações.
Uma maneira de corrigir isso é interromper a vinculação da biblioteca a uma das
dependências cc_shared_library
. Ao mesmo tempo, a que ainda está vinculada precisa exportar a biblioteca para que a que não estiver vinculada mantenha a visibilidade dos símbolos. Outra maneira é extrair uma terceira biblioteca que exporte o destino.
Uma terceira maneira é marcar o cc_library
de culpado com LINKABLE_MORE_THAN_ONCE
,
mas essa correção precisa ser rara, e você precisa absolutamente garantir que o
cc_library
seja realmente seguro para vincular mais de uma vez.
'//foo:foo' is already linked statically in '//bar:bar' but not exported`
Isso significa que uma biblioteca no fechamento transitivo da deps
pode ser acessada sem passar por uma das dependências cc_shared_library
, mas já está vinculada a um cc_shared_library
diferente no dynamic_deps
e não é exportada.
A solução é exportá-la da dependência cc_shared_library
ou extrair um terceiro cc_shared_library
que a exporta.
Do not place libraries which only contain a precompiled dynamic library in deps.
Se você tem uma biblioteca dinâmica pré-compilada, isso não precisa e não pode ser vinculado estaticamente ao destino cc_shared_library
atual que você está criando. Portanto, ele não pertence a deps
da
cc_shared_library
. Se essa biblioteca dinâmica pré-compilada for uma dependência de uma das suas cc_libraries
, a cc_library
precisará depender diretamente dela.
Trying to export a library already exported by a different shared library
Esse erro será exibido se, na regra atual, você estiver exportando um destino que já está sendo exportado por uma das dependências dinâmicas.
Para corrigir isso, remova o destino de deps
e apenas confie nele da dependência
dinâmica ou verifique se o exports_filter
não o detecta.
Argumentos
Atributos | |
---|---|
name |
Um nome exclusivo para este destino. |
deps
|
Qualquer dependência de biblioteca transitiva dessas dependências diretas será vinculada a essa biblioteca compartilhada, desde que elas ainda não tenham sido vinculadas por um
Durante a análise, a implementação da regra considerará qualquer destino listado em
A implementação também acionará erros sempre que a mesma biblioteca for vinculada estaticamente a mais de uma |
additional_linker_inputs
|
user_link_flags .
|
dynamic_deps
|
cc_shared_library de que o destino atual depende.
A implementação de |
exports_filter
|
Qualquer destino
Observe que esse atributo não está realmente adicionando uma borda de dependência a esses destinos. Em vez disso, a borda de dependência precisa ser criada por A seguinte sintaxe é permitida:
|
shared_lib_name
|
|
user_link_flags
|
cc_shared_library( name = "foo_shared", additional_linker_inputs = select({ "//src/conditions:linux": [ ":foo.lds", ":additional_script.txt", ], "//conditions:default": []}), user_link_flags = select({ "//src/conditions:linux": [ "-Wl,-rpath,kittens", "-Wl,--version-script=$(location :foo.lds)", "-Wl,--script=$(location :additional_script.txt)", ], "//conditions:default": []}), ... ) |
win_def_file
|
Esse atributo só deve ser usado quando o Windows é a plataforma de destino. Ele pode ser usado para exportar símbolos durante a vinculação de uma biblioteca compartilhada. |
fdo_prefetch_hints
Ver origem da regrafdo_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 de FDO que está no espaço de trabalho ou em um caminho absoluto especificado. 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 este destino. |
profile
|
|
perfil_fdo
Ver origem da regrafdo_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 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 este destino. |
absolute_path_profile
|
|
profile
|
|
proto_profile
|
|
propulsor_otimizar
Ver origem da regrapropeller_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 este destino. |
ld_profile
|
|
teste_cc
Ver origem da regracc_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 este destino. |
deps
|
Podem ser destinos |
srcs
|
Todos os arquivos Um arquivo Todos os arquivos Se o nome de uma regra estiver em
...e qualquer regra que produza esses arquivos. Diferentes extensões indicam diferentes linguagens de programação de acordo com a convenção do GCC. |
additional_linker_inputs
|
Por exemplo, arquivos compilados do Windows .res podem ser fornecidos aqui para serem incorporados ao destino binário. |
copts
|
Cada string nesse atributo é adicionada à ordem especificada em
Se o pacote declarar o recurso
|
defines
|
-D e adicionada à linha de comando de compilação dessa meta, bem como a todas as regras que dependem dela. Tenha muito cuidado, já que isso pode ter
efeitos de longo alcance. Em caso de dúvida, adicione valores definidos a local_defines .
|
includes
|
Sujeito à substituição "Criar variável".
Cada string é precedida por Os cabeçalhos precisam ser adicionados a srcs ou hdrs. Caso contrário, eles não estarão disponíveis para regras dependentes quando a compilação for colocada em sandbox (o padrão). |
linkopts
|
LINKOPTS antes de vincular o destino binário.
Cada elemento dessa lista que não começa com |
linkstatic
|
cc_binary e cc_test : vincule o binário no modo estático. Para cc_library.linkstatic : veja abaixo.
Por padrão, essa opção está ativada para
Se ativada e for um binário ou teste, essa opção solicitará que a ferramenta de compilação seja vinculada a Existem três maneiras diferentes de vincular um executável:
O atributo
Se for |
local_defines
|
-D e adicionada à linha de comando de compilação para esse destino, mas não aos dependentes.
|
malloc
|
Por padrão, os binários C++ são vinculados ao |
nocopts
|
COPTS preexistente que corresponda a essa expressão regular (incluindo valores explicitamente especificados no atributo copts da regra) será removido de COPTS para compilar essa regra.
Esse atributo raramente é necessário.
|
stamp
|
Os binários carimbados não são recriados, a menos que as dependências mudem. |
win_def_file
|
Esse atributo só deve ser usado quando o Windows é a plataforma de destino. Ele pode ser usado para exportar símbolos durante a vinculação de uma biblioteca compartilhada. |
cc_toolchain
Ver origem da regracc_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 em C++.
Essa regra é responsável por:
-
Coletando todos os artefatos necessários para a execução das ações do C++. Isso é feito por atributos como
all_files
,compiler_files
,linker_files
ou outros atributos que terminam com_files
. Esses são os grupos de arquivos que normalmente agrupam todos os arquivos necessários. -
Gerar linhas de comando corretas para ações C++. Isso é feito usando o provedor
CcToolchainConfigInfo
(detalhes abaixo).
Use o atributo toolchain_config
para configurar o conjunto de ferramentas em C++.
Veja também esta
página
para configuração elaborada do conjunto de ferramentas do C++ e documentação de seleção do conjunto de ferramentas.
Use tags = ["manual"]
para evitar que os conjuntos de ferramentas sejam criados e configurados desnecessariamente ao invocar bazel build //...
Argumentos
Atributos | |
---|---|
name |
Um nome exclusivo para este destino. |
all_files
|
all_files é um superconjunto
de todos os outros atributos que fornecem artefatos (por exemplo, a compilação de linktamp precisa dos arquivos de compilação
e de link, por isso é necessário usar all_files ).
Isso é o que |
ar_files
|
Coleção de todos os artefatos cc_toolchains necessários para ações de arquivamento. |
as_files
|
Coleção de todos os artefatos cc_toolchain necessários para ações de montagem. |
compiler
|
toolchain_identifier . Ele será um ambiente autônomo
depois da
migração do CROSSTOOL para o Starlark
e será removido em
#7075.
Quando definido, ele será usado para executar a seleção de crosstool_config.toolchain. Ele terá precedência sobre a opção --cpu Bazel. |
compiler_files
|
|
compiler_files_without_includes
|
|
coverage_files
|
|
cpu
|
Quando definido, ele será usado para executar a seleção de crosstool_config.toolchain. Ele terá precedência sobre a opção --cpu Bazel. |
dwp_files
|
|
dynamic_runtime_lib
|
Ele será usado quando o recurso "static_link_cpp_runtimes" estiver ativado e estivermos vinculando as dependências dinamicamente. |
exec_transition_for_inputs
|
|
libc_top
|
|
linker_files
|
|
module_map
|
|
objcopy_files
|
|
static_runtime_lib
|
Isso será usado quando o recurso "static_link_cpp_runtimes" estiver ativado e estivermos 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 maneira recomendada de associar |
cc_toolchain_suite
Ver origem da regracc_toolchain_suite(name, compatible_with, deprecation, distribs, features, licenses, restricted_to, tags, target_compatible_with, testonly, toolchains, visibility)
Representa um conjunto de conjuntos de ferramentas do C++.
Essa regra é responsável por:
- Coletando todos os conjuntos de ferramentas C++ relevantes.
-
Selecionar um conjunto de ferramentas, dependendo das opções
--cpu
e--compiler
passadas para o Bazel.
Veja também esta página para configuração elaborada do conjunto de ferramentas do C++ e documentação de seleção do conjunto de ferramentas.
Argumentos
Atributos | |
---|---|
name |
Um nome exclusivo para este destino. |
toolchains
|
cc_toolchain . "<cpu>" será usado quando apenas --cpu for passado para o Bazel, e "<cpu>|<compiler>" será usado quando --cpu e --compiler forem passados 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", }, ) |