Reglas
- cc_binary
- cc_import
- cc_library
- cc_proto_library
- cc_shared_library
- fdo_prefetch_hints
- fdo_profile
- memprof_profile
- propeller_optimize
- cc_test
- cc_toolchain
- cc_toolchain_suite
cc_binary
Ver el código fuente de la reglacc_binary(name, deps, srcs, data, additional_linker_inputs, args, compatible_with, copts, defines, deprecation, distribs, env, exec_compatible_with, exec_properties, features, includes, licenses, link_extra_lib, linkopts, linkshared, linkstatic, local_defines, malloc, nocopts, output_licenses, restricted_to, stamp, tags, target_compatible_with, testonly, toolchains, visibility, win_def_file)
Objetivos de salida implícitos
name.stripped
(solo se compila si se solicita de forma explícita): Es un fragmento versión del objeto binario.strip -g
se ejecuta en el objeto binario para quitar los símbolos de depuración. Se pueden proporcionar opciones adicionales de barra en la línea de comandos mediante--stripopt=-foo
Este resultado solo se compila si se solicita de forma explícita.name.dwp
(solo se compila si se solicita de forma explícita): Si Fission está habilitado, es un archivo de paquete de información de depuración adecuado para depurar objetos binarios implementados de forma remota. De lo contrario, un archivo vacío.
Argumentos
Atributos | |
---|---|
name |
Nombre: Obligatorio Un nombre único para este objetivo. |
deps
|
Es una lista de etiquetas. El valor predeterminado es Pueden ser |
srcs
|
Lista de etiquetas; el valor predeterminado es Se harán los cambios en todos los archivos No se compilará un archivo Todos los archivos Si el nombre de una regla está en el
Tipos de archivos
…y cualquier regla que genere esos archivos. Las diferentes extensiones denotan diferentes lenguajes de programación según la convención de gcc. |
additional_linker_inputs
|
Es una lista de etiquetas. El valor predeterminado es Por ejemplo, aquí se pueden proporcionar archivos .res compilados de Windows para incorporarlos en el objeto binario. |
copts
|
Lista de cadenas; el valor predeterminado es
Cada cadena de este atributo se agrega en el orden determinado a
Si el paquete declara la función |
defines
|
Lista de cadenas; el valor predeterminado es -D y se agrega a la línea de comandos de compilación de este destino,
así como a cada regla que depende de él. Ten mucho cuidado, ya que esto podría haber
efectos de largo alcance. Si tienes dudas, agrega valores definidos a
local_defines en su lugar.
|
includes
|
Es una lista de cadenas. El valor predeterminado es
Sujeto a la sustitución de "Make variable".
Cada cadena está precedida por Se deben agregar encabezados a srcs o hdrs; de lo contrario, no estarán disponibles para los dependientes. cuando la compilación se encuentra en zona de pruebas (opción predeterminada). |
link_extra_lib
|
Etiqueta; el valor predeterminado es
De forma predeterminada, los objetos binarios de C++ se vinculan con |
linkopts
|
Es una lista de cadenas. El valor predeterminado es LINKOPTS antes de
que vincula el objetivo binario.
Se supone que cada elemento de esta lista que no comienza con |
linkshared
|
Booleano; no configurable; el valor predeterminado es linkshared=True en tu regla. De forma predeterminada
esta opción está desactivada.
La presencia de esta marca significa que la vinculación se produce con la marca
Si especificas |
linkstatic
|
Booleano; el valor predeterminado es cc_binary y
cc_test : vincula el objeto binario en estático
. Para cc_library.linkstatic : consulta a continuación.
De forma predeterminada, esta opción está activada para
Si se habilita y es un objeto binario o de prueba, esta opción le indica a la herramienta de compilación que se vincule en
Usa En realidad, existen tres formas diferentes de vincular un archivo ejecutable:
El atributo
Si es |
local_defines
|
Lista de cadenas; el valor predeterminado es -D y se agrega a la línea de comandos de compilación para este destino,
pero no a sus dependientes.
|
malloc
|
Etiqueta (Label); el valor predeterminado es
De forma predeterminada, los objetos binarios de C++ se vinculan con |
nocopts
|
Cadena; el valor predeterminado es COPTS preexistente que coincida con esta expresión regular
(incluidos los valores especificados explícitamente en el atributo copts de la regla) se quitarán del
COPTS para compilar esta regla.
Rara vez se necesita este atributo.
|
stamp
|
Número entero (el valor predeterminado es
Los objetos binarios estampados no se vuelven a compilar, a menos que cambien sus dependencias. |
win_def_file
|
Etiqueta; el valor predeterminado es Este atributo solo se debe usar cuando Windows es la plataforma de destino. Se puede usar para exportar símbolos durante la vinculación de una biblioteca compartida |
cc_import
Ver la fuente de la reglacc_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)
Las reglas cc_import
permiten que los usuarios importen bibliotecas C/C++ precompiladas.
Los siguientes son los casos de uso típicos:
1. Vincula una 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) Vinculación de una biblioteca compartida (Unix)
cc_import( name = "mylib", hdrs = ["mylib.h"], shared_library = "libmylib.so", )3. Vincula una biblioteca compartida con una biblioteca de interfaz (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) Vincula una biblioteca compartida con
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. Vinculación a una biblioteca estática o compartida
En 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, )En 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
admite un atributo de inclusión. Por ejemplo:
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 |
Nombre: obligatorio. Un nombre único para este destino. |
deps
|
Es una lista de etiquetas. El valor predeterminado es deps
en Atributos típicos definidos por
la mayoría de las reglas de compilación.
|
hdrs
|
Es una lista de etiquetas. El valor predeterminado es |
alwayslink
|
Booleano; el valor predeterminado es Si alwayslink no funciona con VS 2017 en Windows, es debido a un problema conocido. Actualiza tu VS 2017 a la versión más reciente. |
interface_library
|
Etiqueta; el valor predeterminado es Tipos de archivos permitidos:
|
shared_library
|
Etiqueta; el valor predeterminado es Tipos de archivos permitidos: |
static_library
|
Etiqueta (Label); el valor predeterminado es Tipos de archivos permitidos: |
system_provided
|
Booleano; el valor predeterminado es interface_library y
El campo shared_library debe estar vacío.
|
cc_library
Ver el código fuente de la reglacc_library(name, deps, srcs, data, hdrs, additional_compiler_inputs, additional_linker_inputs, 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)
Verificación de inclusión de encabezados
Todos los archivos de encabezado que se usan en la compilación se deben declarar en el archivo hdrs
.
srcs
de cc_*
reglas. Esto se aplica de manera forzosa.
Para las reglas cc_library
, los encabezados en hdrs
conforman la interfaz pública de
la biblioteca y se puede incluir directamente desde los archivos de hdrs
y
srcs
de la propia biblioteca, así como de los archivos en hdrs
y
srcs
de cc_*
reglas que muestran la biblioteca en su deps
Los encabezados en srcs
solo se deben incluir directamente desde los archivos en hdrs
y srcs
de la biblioteca. Cuando decidas si colocar un encabezado en hdrs
o srcs
, debes preguntarte si deseas que los consumidores de esta biblioteca puedan incluirlo directamente. Esta es aproximadamente la misma decisión que la que se toma entre la visibilidad de public
y private
en los lenguajes de programación.
Las reglas cc_binary
y cc_test
no tienen una interfaz exportada, por lo que tampoco tienen un atributo hdrs
. Todos los encabezados que pertenecen al objeto binario o la prueba
directamente debería aparecer en srcs
.
Para ilustrar estas reglas, observa el siguiente ejemplo.
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"], )
En la siguiente tabla, se enumeran las inclusiones directas permitidas en este ejemplo. Por ejemplo:
foo.cc
puede incluir directamente foo.h
y bar.h
, pero
no baz.h
.
Incluye el archivo | Inclusiones 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 |
Las reglas de verificación de inclusión solo se aplican a las solicitudes directas
inclusiones. En el ejemplo anterior, foo.cc
puede incluir bar.h
, que puede incluir baz.h
, que, a su vez, puede incluir baz-impl.h
. Técnicamente, el
La compilación de un archivo .cc
puede incluir de forma transitiva cualquier encabezado
en el archivo hdrs
o srcs
en
cualquier cc_library
en el cierre transitivo deps
En este caso, el compilador puede leer baz.h
y baz-impl.h
cuando compila foo.cc
, pero foo.cc
no debe contener #include "baz.h"
. Para que eso sea
permitido, baz
se debe agregar a deps
de foo
.
Bazel depende de la compatibilidad con la cadena de herramientas para aplicar las reglas de verificación de inclusión.
La cadena de herramientas debe admitir la función layering_check
y solicitarla de forma explícita, por ejemplo, a través de la
marca de línea de comandos --features=layering_check
o el
parámetro features
de la
función package
. Las cadenas de herramientas
que proporciona Bazel solo admiten esta función con Clang en Unix y macOS.
Argumentos
Atributos | |
---|---|
name |
Nombre: Obligatorio Un nombre único para este objetivo. |
deps
|
Es una lista de etiquetas. El valor predeterminado es Pueden ser objetivos |
srcs
|
Lista de etiquetas; el valor predeterminado es Se harán los cambios en todos los archivos No se compilará un archivo Todos los archivos Si el nombre de una regla está en el
Tipos de archivos
…y cualquier regla que genere esos archivos. Las diferentes extensiones denotan diferentes lenguajes de programación en de acuerdo con la convención de GCC. |
hdrs
|
Lista de etiquetas; el valor predeterminado es Esta es la ubicación más recomendable para declarar archivos de encabezado que
describen la interfaz de la biblioteca. Estos encabezados estarán disponibles para que las fuentes los incluyan en esta regla o en reglas dependientes.
Los encabezados que no sean incluidos por un cliente de esta biblioteca deben ser
en el atributo |
additional_compiler_inputs
|
Lista de etiquetas; el valor predeterminado es |
additional_linker_inputs
|
Lista de etiquetas; el valor predeterminado es Por ejemplo, aquí se pueden proporcionar archivos .res compilados de Windows para incorporarlos en el objeto binario. |
alwayslink
|
Booleano; el valor predeterminado es srcs , incluso si algunos no contienen símbolos a los que hace referencia el objeto binario.
Esto es útil si el código en el objeto binario no llama explícitamente a tu código, p. ej., si tu código se registra para recibir alguna devolución de llamada que proporciona algún servicio.
Si Alwayslink no funciona con VS 2017 en Windows, se debe a un problema conocido, actualiza tu versión de VS 2017 a la más reciente. |
copts
|
Es una lista de cadenas. El valor predeterminado es
Cada cadena de este atributo se agrega en el orden determinado a
Si el paquete declara la función |
defines
|
Es una lista de cadenas. El valor predeterminado es -D y se agrega a la línea de comandos de compilación de este destino,
así como a cada regla que depende de él. Ten mucho cuidado, ya que esto puede tener efectos de gran alcance. Si tienes dudas, agrega valores definidos a local_defines .
|
implementation_deps
|
Lista de etiquetas; el valor predeterminado es deps , los encabezados y las rutas de inclusión de estas bibliotecas (y todas sus dependencias transitivas) solo se usan para la compilación de esta biblioteca, no para las bibliotecas que dependen de ella. Las bibliotecas especificadas con implementation_deps siguen vinculadas en
objetivos binarios que dependen de esta biblioteca.
Por ahora, el uso se limita a cc_libraries y está protegido por la marca |
include_prefix
|
Cadena; el valor predeterminado es Cuando se establece, se puede acceder a los encabezados del atributo El prefijo del atributo |
includes
|
Es una lista de cadenas. El valor predeterminado es
Sujeto a la sustitución de "Make variable".
Cada cadena se antepone con Se deben agregar encabezados a srcs o hdrs; de lo contrario, no estarán disponibles para los dependientes. cuando la compilación se encuentra en zona de pruebas (opción predeterminada). |
linkopts
|
Es una lista de cadenas. El valor predeterminado es LINKOPTS antes de vincular el destino binario.
Cada elemento de esta lista que no comienza con |
linkstamp
|
Etiqueta; el valor predeterminado es base .
|
linkstatic
|
Booleano; el valor predeterminado es cc_binary y
cc_test : vincula el objeto binario en estático
. Para cc_library.linkstatic , consulta a continuación.
De forma predeterminada, esta opción está activada para
Si se habilita y es un objeto binario o de prueba, esta opción le indica a la herramienta de compilación que se vincule en
Usa En realidad, existen tres formas diferentes de vincular un archivo ejecutable:
El atributo
Si es |
local_defines
|
Lista de cadenas; el valor predeterminado es -D y se agrega a la línea de comandos de compilación para este destino, pero no a sus elementos dependientes.
|
nocopts
|
String; el valor predeterminado es COPTS preexistente que coincida con esta expresión regular
(incluidos los valores especificados explícitamente en el atributo copts de la regla) se quitarán del
COPTS para compilar esta regla.
Este atributo rara vez debería ser necesario.
|
strip_include_prefix
|
String; el valor predeterminado es Cuando se configuran, se puede acceder a los encabezados del atributo Si es una ruta de acceso relativa, se considera una ruta de acceso relativa al paquete. Si se trata de un dato absoluto, se entiende como una ruta de acceso relativa al repositorio. El prefijo del atributo |
textual_hdrs
|
Es una lista de etiquetas. El valor predeterminado es Esta es la ubicación para declarar archivos de encabezado que no se pueden compilar por sí solos, es decir, siempre deben incluirse de forma textual en otros archivos de origen para compilar un código válido. |
win_def_file
|
Etiqueta; el valor predeterminado es Este atributo solo debe usarse cuando Windows es la plataforma de destino. Se puede usar para exportar símbolos durante la vinculación de una biblioteca compartida. |
cc_proto_library
Ver el código fuente de la reglacc_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
genera código C++ a partir de archivos .proto
.
deps
debe apuntar a las reglas proto_library
.
Ejemplo:
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 |
Nombre: obligatorio. Un nombre único para este objetivo. |
deps
|
Es una lista de etiquetas. El valor predeterminado es proto_library
para generar el código C++.
|
cc_shared_library
Ver la fuente de la reglacc_shared_library(name, deps, additional_linker_inputs, dynamic_deps, exports_filter, shared_lib_name, tags, user_link_flags, win_def_file)
Produce una biblioteca compartida.
Ejemplo
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"], )
En el ejemplo, foo_shared
vincula de forma estática foo
.
y baz
, que es la última de una dependencia transitiva. No
vínculo bar
porque ya lo proporciona dinámicamente el
bar_shared
de dynamic_dep
.
foo_shared
usa un archivo *.lds de la secuencia de comandos del vinculador para controlar qué
los símbolos deben exportarse. La lógica de la regla cc_shared_library
no controla qué símbolos se exportan, solo usa lo que se supone que
para dar errores durante la fase de análisis si dos bibliotecas compartidas exportan
los mismos objetivos.
Se supone que cada dependencia directa de cc_shared_library
y exportarse. Por lo tanto, Bazel supone durante el análisis que foo_shared
está exportando foo
. No se supone que foo_shared
exporte baz
. Todos los objetivos coincidieron con la exports_filter
y se supone que también se exportan.
Cada cc_library
del ejemplo debería aparecer como máximo en una
cc_shared_library
Si quisiéramos vincular baz
también a bar_shared
, tendríamos que agregar tags = ["LINKABLE_MORE_THAN_ONCE"]
a baz
.
Debido al atributo shared_lib_name
, el archivo producido por
bar_shared
tendrá el nombre bar.so
, en lugar de
al nombre libbar.so
que tendría de forma predeterminada en Linux.
Errores
Two shared libraries in dependencies export the same symbols.
Esto sucederá cuando crees un destino con dos
cc_shared_library
dependencias que exportan el mismo destino. Para solucionar este problema, debes evitar que las bibliotecas se exporten en una de las dependencias de cc_shared_library
.
Two shared libraries in dependencies link the same library statically
Esto sucederá cada vez que crees un cc_shared_library
nuevo con dos dependencias cc_shared_library
diferentes que vinculen el mismo objetivo de forma estática.
Es similar al error con las exportaciones.
Una forma de solucionar este problema es dejar de vincular la biblioteca a una de las dependencias de cc_shared_library
. Al mismo tiempo, la que lo vincula
necesita exportar la biblioteca para que la que no la vincule mantenga la visibilidad
los símbolos. Otra forma es extraer una tercera biblioteca que exporte el destino.
Una tercera forma es etiquetar al culpable cc_library
con LINKABLE_MORE_THAN_ONCE
.
pero esta solución debería ser poco común
y debes asegurarte de que el
Es seguro vincular cc_library
más de una vez.
'//foo:foo' is already linked statically in '//bar:bar' but not exported`
Eso significa que se puede acceder a una biblioteca en el cierre transitivo de tu deps
sin pasar por una de las dependencias cc_shared_library
, pero ya
vinculado a un cc_shared_library
diferente en dynamic_deps
y no está
y exportarse.
La solución es exportarlo desde la dependencia cc_shared_library
o extraer
un tercer cc_shared_library
que lo exporta.
Do not place libraries which only contain a precompiled dynamic library in deps.
Si tienes una biblioteca dinámica precompilada, no es necesario ni se puede
vinculada de forma estática al destino actual cc_shared_library
al que
creando. Por lo tanto, no pertenece a deps
de las
cc_shared_library
Si esta biblioteca dinámica precompilada es una dependencia de uno de tus cc_libraries
, el cc_library
debe depender de ella directamente.
Trying to export a library already exported by a different shared library
Verás este error si, en la regla actual, declaras que quieres exportar un objetivo que ya exporta una de tus dependencias dinámicas.
Para solucionar este problema, quita la segmentación de deps
y confía en ella de la campaña dinámica.
o asegúrate de que exports_filter
no detecte este objetivo.
Argumentos
Atributos | |
---|---|
name |
Nombre: obligatorio. Un nombre único para este objetivo. |
deps
|
Es una lista de etiquetas. El valor predeterminado es
Cualquier dependencia de biblioteca transitiva de estas dependencias directas se vinculará a esta biblioteca compartida, siempre y cuando no las haya vinculado un
Durante el análisis, la implementación de la regla considerará que la biblioteca compartida exporta cualquier destino que se enumere en
La implementación también activará errores cada vez que la misma biblioteca esté vinculada de forma estática
en más de un |
additional_linker_inputs
|
Es una lista de etiquetas. El valor predeterminado es user_link_flags .
|
dynamic_deps
|
Lista de etiquetas; el valor predeterminado es cc_shared_library de las que depende el objetivo actual.
La implementación de |
exports_filter
|
Es una lista de cadenas. El valor predeterminado es
Se da por sentado que la biblioteca compartida exporta cualquier
Ten en cuenta que este atributo en realidad no agrega una arista de dependencia a esos destinos, el
el perímetro de dependencia, en su lugar, debe ser creado por Se permite la siguiente sintaxis:
|
shared_lib_name
|
String; el valor predeterminado es |
user_link_flags
|
Es una lista de cadenas. El valor predeterminado es 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
|
Etiqueta; el valor predeterminado es Este atributo solo se debe usar cuando Windows es la plataforma de destino. Se puede usar para exportar símbolos durante la vinculación de una biblioteca compartida. |
fdo_prefetch_hints
Ver la fuente de la reglafdo_prefetch_hints(name, compatible_with, deprecation, distribs, features, licenses, profile, restricted_to, tags, target_compatible_with, testonly, visibility)
Representa un perfil de sugerencias de carga previa de FDO que se encuentra en el lugar de trabajo o en un estado especificado ruta de acceso absoluta. Ejemplos:
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 |
Nombre: Obligatorio Un nombre único para este destino. |
profile
|
Etiqueta (Label); el valor predeterminado es |
fdo_profile
Ver el código fuente de la reglafdo_profile(name, absolute_path_profile, compatible_with, deprecation, distribs, features, licenses, profile, proto_profile, restricted_to, tags, target_compatible_with, testonly, visibility)
Representa un perfil de FDO que se encuentra en el lugar de trabajo o en una ruta de acceso absoluta especificada. Ejemplos:
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 |
Nombre: Obligatorio Un nombre único para este objetivo. |
absolute_path_profile
|
String; el valor predeterminado es |
profile
|
Etiqueta (Label); el valor predeterminado es |
proto_profile
|
Etiqueta (Label); el valor predeterminado es |
memprof_profile
Ver el código fuente de la reglamemprof_profile(name, absolute_path_profile, compatible_with, deprecation, distribs, features, licenses, profile, restricted_to, tags, target_compatible_with, testonly, visibility)
Representa un perfil MEMPROF que se encuentra en el espacio de trabajo o en un ruta de acceso absoluta. Ejemplos:
memprof_profile( name = "memprof", profile = "//path/to/memprof:profile.afdo", ) memprof_profile( name = "memprof_abs", absolute_path_profile = "/absolute/path/profile.afdo", )
Argumentos
Atributos | |
---|---|
name |
Nombre: obligatorio. Un nombre único para este destino. |
absolute_path_profile
|
Cadena; el valor predeterminado es |
profile
|
Etiqueta; el valor predeterminado es |
propeller_optimize
Ver el código fuente de la reglapropeller_optimize(name, compatible_with, deprecation, distribs, features, ld_profile, licenses, restricted_to, tags, target_compatible_with, testonly, visibility)
Representa un perfil de optimización de Propeller en el lugar de trabajo. Ejemplo:
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 |
Nombre: Obligatorio Un nombre único para este objetivo. |
ld_profile
|
Etiqueta; el valor predeterminado es |
cc_test
Ver el código fuente de la reglacc_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, link_extra_lib, 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 |
Nombre: Obligatorio Un nombre único para este destino. |
deps
|
Es una lista de etiquetas. El valor predeterminado es Pueden ser |
srcs
|
Lista de etiquetas; el valor predeterminado es Se harán los cambios en todos los archivos No se compilará un archivo Todos los archivos Si el nombre de una regla está en el
Tipos de archivos
…y cualquier regla que genere esos archivos. Las diferentes extensiones denotan diferentes lenguajes de programación según la convención de gcc. |
additional_linker_inputs
|
Lista de etiquetas; el valor predeterminado es Por ejemplo, aquí se pueden proporcionar archivos .res compilados de Windows para incorporarlos en el objeto binario. |
copts
|
Lista de cadenas; el valor predeterminado es
Cada cadena de este atributo se agrega en el orden determinado a
Si el paquete declara la función
|
defines
|
Lista de cadenas; el valor predeterminado es -D y se agrega a la línea de comandos de compilación a este destino, así como a cada regla que depende de él. Ten mucho cuidado, ya que esto puede tener efectos de gran alcance. Si tienes dudas, agrega valores definidos a
local_defines en su lugar.
|
includes
|
Lista de cadenas; el valor predeterminado es
Sujeto a la sustitución de "Make variable".
Cada cadena está precedida por Los encabezados se deben agregar a srcs o hdrs; de lo contrario, no estarán disponibles para las reglas dependientes cuando la compilación esté en zona de pruebas (la opción predeterminada). |
link_extra_lib
|
Etiqueta; el valor predeterminado es
De forma predeterminada, los objetos binarios de C++ se vinculan con |
linkopts
|
Es una lista de cadenas. El valor predeterminado es LINKOPTS antes de vincular el destino binario.
Cada elemento de esta lista que no comienza con |
linkstatic
|
Booleano; el valor predeterminado es cc_binary y
cc_test : vincula el objeto binario en estático
. Para cc_library.linkstatic : consulta a continuación.
De forma predeterminada, esta opción está activada para
Si se habilita y es un objeto binario o de prueba, esta opción le indica a la herramienta de compilación que se vincule en
Usa En realidad, existen tres formas diferentes de vincular un archivo ejecutable:
El atributo
Si es |
local_defines
|
Lista de cadenas; el valor predeterminado es -D y se agrega a la línea de comandos de compilación para este destino,
pero no a sus dependientes.
|
malloc
|
Etiqueta (Label); el valor predeterminado es
De forma predeterminada, los objetos binarios de C++ se vinculan con |
nocopts
|
Cadena; el valor predeterminado es COPTS preexistente que coincida con esta expresión regular
(incluidos los valores especificados explícitamente en el atributo copts de la regla) se quitarán del
COPTS para compilar esta regla.
Rara vez se necesita este atributo.
|
stamp
|
Integer; el valor predeterminado es
Los objetos binarios sellados no se vuelven a compilar, a menos que cambien sus dependencias. |
win_def_file
|
Etiqueta (Label); el valor predeterminado es Este atributo solo se debe usar cuando Windows es la plataforma de destino. Se puede usar para exportar símbolos durante la vinculación de una biblioteca compartida. |
cc_toolchain
Ver la fuente de la reglacc_toolchain(name, all_files, ar_files, as_files, compatible_with, compiler_files, compiler_files_without_includes, coverage_files, 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 una cadena de herramientas de C++.
Esta regla es responsable de lo siguiente:
-
Recopila todos los artefactos necesarios para que se ejecuten las acciones de C++. Esto lo hace
atributos, como
all_files
,compiler_files
linker_files
o algún otro atributo que termina en_files
). Son por lo general, los grupos de archivos que globalizan todos los archivos necesarios. -
Genera líneas de comandos correctas para acciones de C++. Esto se hace usando
CcToolchainConfigInfo
proveedor (más detalles a continuación).
Usa el atributo toolchain_config
para configurar la cadena de herramientas de C++.
Ver también esto
página
para obtener documentación elaborada de la cadena de herramientas de C++ y de la selección de la cadena de herramientas.
Usa tags = ["manual"]
para evitar que se compilen y configuren cadenas de herramientas.
innecesariamente cuando se invoca bazel build //...
Argumentos
Atributos | |
---|---|
name |
Nombre: obligatorio. Un nombre único para este destino. |
all_files
|
Etiqueta; obligatorio. Es la colección de todos los artefactos de cc_toolchain. Estos artefactos se agregarán como entradas a todas las acciones relacionadas con rules_cc (con la excepción de las acciones que usan conjuntos más precisos de artefactos de los atributos que se indican a continuación). Bazel supone queall_files es un superconjunto de todos los demás atributos que proporcionan artefactos (p. ej., la compilación de linkstamp necesita archivos de compilación y vinculación, por lo que toma all_files ).
Esto es lo que contiene |
ar_files
|
Etiqueta (Label); el valor predeterminado es Es la colección de todos los artefactos de cc_toolchain necesarios para archivar acciones. |
as_files
|
Etiqueta; el valor predeterminado es Es la colección de todos los artefactos de cc_toolchain necesarios para las acciones de ensamblado. |
compiler_files
|
Etiqueta; obligatorio. Es una colección de todos los artefactos cc_toolchain necesarios para las acciones de compilación. |
compiler_files_without_includes
|
Etiqueta; el valor predeterminado es |
coverage_files
|
Etiqueta (Label); el valor predeterminado es |
dwp_files
|
Etiqueta; obligatorio. Es una colección de todos los artefactos cc_toolchain necesarios para las acciones de dwp. |
dynamic_runtime_lib
|
Etiqueta; el valor predeterminado es Se usará cuando la función "static_link_cpp_runtimes" esté habilitada y vinculemos las dependencias de forma dinámica. |
exec_transition_for_inputs
|
Booleano; el valor predeterminado es |
libc_top
|
Etiqueta (Label); el valor predeterminado es |
linker_files
|
Etiqueta (Label): Obligatorio Es una colección de todos los artefactos cc_toolchain necesarios para las acciones de vinculación. |
module_map
|
Etiqueta; el valor predeterminado es |
objcopy_files
|
Etiqueta (Label): Obligatorio Es la colección de todos los artefactos de cc_toolchain necesarios para las acciones de objcopy. |
static_runtime_lib
|
Etiqueta (Label); el valor predeterminado es Se usará cuando “static_link_cpp_runtimes” está habilitada y vincularemos dependencias de forma estática. |
strip_files
|
Etiqueta (Label): Obligatorio Es una colección de todos los artefactos cc_toolchain necesarios para las acciones de eliminación. |
supports_header_parsing
|
Booleano; el valor predeterminado es |
supports_param_files
|
Booleano; el valor predeterminado es |
toolchain_config
|
Etiqueta (Label): Obligatorio La etiqueta de la regla que proporcionacc_toolchain_config_info .
|
toolchain_identifier
|
Cadena; no configurable; el valor predeterminado es
Hasta que se solucione el problema #5380, esta es la forma recomendada de asociar |
cc_toolchain_suite
Ver la fuente de la reglacc_toolchain_suite(name, compatible_with, deprecation, distribs, features, licenses, restricted_to, tags, target_compatible_with, testonly, toolchains, visibility)
Representa una colección de cadenas de herramientas de C++.
Esta regla es responsable de lo siguiente:
- Recopilar todas las cadenas de herramientas de C++ relevantes
-
Selección de una cadena de herramientas según las opciones
--cpu
y--compiler
pasan a Bazel.
Consulta también esta página para obtener documentación detallada sobre la configuración y la selección de la cadena de herramientas de C++.
Argumentos
Atributos | |
---|---|
name |
Nombre: obligatorio. Un nombre único para este destino. |
toolchains
|
Cadenas de asignación de diccionarios a etiquetas; no configurable; obligatorio. Un mapa de cadenas "<cpu>" o "<cpu>|<compiler>" a una etiquetacc_toolchain Se usará "<cpu>" cuando solo se pase --cpu a Bazel, y se usará "<cpu>|<compiler>" cuando se pasen --cpu y --compiler a Bazel. Ejemplo:
cc_toolchain_suite( name = "toolchain", toolchains = { "piii|gcc": ":my_cc_toolchain_for_piii_using_gcc", "piii": ":my_cc_toolchain_for_piii_using_default_compiler", }, ) |