Aturan
- cc_binary
- cc_import
- cc_library
- cc_proto_library
- cc_shared_library
- cc_static_library
- fdo_prefetch_hints
- fdo_profile
- memprof_profile
- propeller_optimize
- cc_test
- cc_toolchain
- cc_toolchain_suite
cc_binary
Lihat sumber aturancc_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)
Target output implisit
name.stripped
(hanya dibuat jika diminta secara eksplisit): Versi biner yang dihilangkan.strip -g
dijalankan pada biner untuk menghapus simbol debug. Opsi penghapusan tambahan dapat diberikan di command line menggunakan--stripopt=-foo
. Output ini hanya dibuat jika diminta secara eksplisit.name.dwp
(hanya dibuat jika diminta secara eksplisit): Jika Fission diaktifkan: file paket informasi debug yang cocok untuk men-debug biner yang di-deploy dari jarak jauh. Lainnya: an file kosong.
Argumen
Atribut | |
---|---|
name |
Nama; wajib Nama unik untuk target ini. |
deps
|
Daftar label; defaultnya adalah Target ini dapat berupa |
srcs
|
Daftar label; defaultnya adalah Semua file File Semua file Jika nama aturan ada di
Jenis file
...dan aturan apa pun yang menghasilkan file tersebut. Ekstensi yang berbeda menunjukkan bahasa pemrograman yang berbeda sesuai dengan konvensi gcc. |
additional_linker_inputs
|
Daftar label; defaultnya adalah Misalnya, file .res Windows yang dikompilasi dapat diberikan di sini untuk disematkan dalam target biner. |
copts
|
Daftar string; defaultnya adalah
Setiap string dalam atribut ini ditambahkan dalam urutan tertentu ke
Jika paket mendeklarasikan feature
|
defines
|
Daftar string; defaultnya adalah -D dan ditambahkan ke command line kompilasi ke target ini,
serta ke setiap aturan yang bergantung padanya. Berhati-hatilah, karena hal ini dapat berdampak luas. Jika ragu, tambahkan nilai yang ditentukan ke
local_defines .
|
includes
|
Daftar string; defaultnya adalah
Tunduk pada penggantian "Buat variabel".
Setiap string diawali dengan Header harus ditambahkan ke srcs atau hdrs, jika tidak, header tidak akan tersedia untuk aturan dependen saat kompilasi di-sandbox (default). |
link_extra_lib
|
Label; defaultnya adalah
Secara default, biner C++ ditautkan dengan |
linkopts
|
Daftar string; defaultnya adalah LINKOPTS sebelum
menautkan target biner.
Setiap elemen dalam daftar ini yang tidak diawali dengan |
linkshared
|
Boolean; tidak dapat dikonfigurasi; defaultnya adalah linkshared=True dalam aturan Anda. Secara default, opsi ini dinonaktifkan.
Kehadiran tanda ini berarti penautan terjadi dengan tanda
Jika Anda menentukan |
linkstatic
|
Boolean; defaultnya adalah cc_binary dan
cc_test : tautkan biner dalam mode
statis. Untuk cc_library.linkstatic : lihat di bawah.
Secara default, opsi ini aktif untuk
Jika diaktifkan dan ini adalah biner atau pengujian, opsi ini memberi tahu alat build untuk menautkan
Sebenarnya ada tiga cara berbeda untuk menautkan file yang dapat dieksekusi:
Atribut
Jika |
local_defines
|
Daftar string; defaultnya adalah -D dan ditambahkan ke command line kompilasi untuk target ini,
tetapi tidak untuk dependensinya.
|
malloc
|
Label; defaultnya adalah
Secara default, biner C++ ditautkan dengan |
nocopts
|
String; default-nya adalah COPTS yang sudah ada dan cocok dengan ekspresi reguler ini
(termasuk nilai yang ditentukan secara eksplisit dalam atribut copts aturan) akan dihapus dari
COPTS untuk tujuan mengompilasi aturan ini.
Atribut ini jarang diperlukan.
|
stamp
|
Bilangan bulat; defaultnya adalah
Biner yang diberi stempel tidak dibangun ulang kecuali jika dependensinya berubah. |
win_def_file
|
Label; defaultnya adalah Atribut ini hanya boleh digunakan jika Windows adalah platform target. Opsi ini dapat digunakan untuk mengekspor simbol selama menautkan library bersama. |
cc_import
Lihat sumber aturancc_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)
Aturan cc_import
memungkinkan pengguna mengimpor library C/C++ yang telah dikompilasi sebelumnya.
Berikut adalah kasus penggunaan umum:
1. Menautkan library statis
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 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", )
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, )
Di 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, )
cc_import
mendukung atribut include. Contoh:
cc_import( name = "curl_lib", hdrs = glob(["vendor/curl/include/curl/*.h"]), includes = [ "vendor/curl/include" ], shared_library = "vendor/curl/lib/.libs/libcurl.dylib", )
Argumen
Atribut | |
---|---|
name |
Nama; wajib Nama unik untuk target ini. |
deps
|
Daftar label; defaultnya adalah deps
di Atribut umum yang ditentukan oleh
sebagian besar aturan build.
|
hdrs
|
Daftar label; defaultnya adalah |
alwayslink
|
Boolean; defaultnya adalah Jika alwayslink tidak berfungsi dengan VS 2017 di Windows, hal itu disebabkan oleh masalah umum, upgrade VS 2017 Anda ke versi terbaru. |
interface_library
|
Label; defaultnya adalah Jenis file yang diizinkan:
|
shared_library
|
Label; defaultnya adalah Jenis file yang diizinkan:
|
static_library
|
Label; defaultnya adalah Jenis file yang diizinkan:
|
system_provided
|
Boolean; defaultnya adalah interface_library harus ditentukan dan
shared_library harus kosong.
|
cc_library
Lihat sumber aturancc_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)
Pemeriksaan penyertaan header
Semua file header yang digunakan dalam build harus dideklarasikan dalam hdrs
atau
srcs
aturan cc_*
. Hal ini diterapkan.
Untuk aturan cc_library
, header dalam hdrs
terdiri dari antarmuka publik
library dan dapat disertakan secara langsung dari file di hdrs
dan
srcs
library itu sendiri serta dari file di hdrs
dan
srcs
aturan cc_*
yang mencantumkan library dalam deps
-nya.
Header di srcs
hanya boleh disertakan langsung dari file di hdrs
dan srcs
library itu sendiri. Saat memutuskan apakah akan memasukkan header ke dalam
hdrs
atau srcs
, Anda harus bertanya apakah Anda ingin konsumen library ini
dapat menyertakannya secara langsung. Keputusan ini hampir sama dengan keputusan antara visibilitas
public
dan private
dalam bahasa pemrograman.
Aturan cc_binary
dan cc_test
tidak memiliki antarmuka yang diekspor, sehingga
juga tidak memiliki atribut hdrs
. Semua header yang termasuk dalam biner atau pengujian
secara langsung harus dicantumkan dalam srcs
.
Untuk mengilustrasikan aturan ini, lihat contoh berikut.
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"], )
Penyertaan langsung yang diizinkan dalam contoh ini tercantum dalam tabel di bawah. Misalnya
foo.cc
diizinkan untuk menyertakan foo.h
dan bar.h
secara langsung, tetapi
tidak baz.h
.
Termasuk file | Pencantuman yang diizinkan |
---|---|
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 |
Aturan pemeriksaan penyertaan hanya berlaku untuk penyertaan langsung. Dalam contoh di atas, foo.cc
diizinkan untuk
menyertakan bar.h
, yang dapat menyertakan baz.h
, yang pada
gilirannya diizinkan untuk menyertakan baz-impl.h
. Secara teknis, kompilasi file .cc
dapat secara transitif menyertakan file header apa pun di hdrs
atau srcs
dalam cc_library
apa pun dalam penutupan transitif deps
. Dalam
kasus ini, compiler dapat membaca baz.h
dan baz-impl.h
saat mengompilasi foo.cc
, tetapi foo.cc
tidak boleh
berisi #include "baz.h"
. Agar hal itu diizinkan, baz
harus ditambahkan ke deps
dari foo
.
Bazel bergantung pada dukungan toolchain untuk menerapkan aturan pemeriksaan penyertaan.
Fitur layering_check
harus didukung oleh toolchain
dan diminta secara eksplisit, misalnya melalui
flag command line --features=layering_check
atau
parameter features
dari
fungsi package
. Toolchain
yang disediakan oleh Bazel hanya mendukung fitur ini dengan clang di Unix dan macOS.
Argumen
Atribut | |
---|---|
name |
Nama; wajib Nama unik untuk target ini. |
deps
|
Daftar label; defaultnya adalah Target ini dapat berupa |
srcs
|
Daftar label; defaultnya adalah Semua file File Semua file Jika nama aturan ada di
Jenis file
...dan aturan apa pun yang menghasilkan file tersebut. Ekstensi yang berbeda menunjukkan bahasa pemrograman yang berbeda sesuai dengan konvensi gcc. |
hdrs
|
Daftar label; defaultnya adalah Ini adalah lokasi yang sangat disarankan untuk mendeklarasikan file header yang
mendeskripsikan antarmuka untuk library. Header ini akan tersedia untuk disertakan oleh sumber dalam aturan ini atau dalam aturan dependen.
Header yang tidak dimaksudkan untuk disertakan oleh klien library ini harus
dicantumkan dalam atribut |
additional_compiler_inputs
|
Daftar label; defaultnya adalah |
additional_linker_inputs
|
Daftar label; defaultnya adalah Misalnya, file .res Windows yang dikompilasi dapat diberikan di sini untuk disematkan dalam target biner. |
alwayslink
|
Boolean; defaultnya adalah srcs , meskipun beberapa di antaranya tidak berisi simbol yang dirujuk oleh biner.
Hal ini berguna jika kode Anda tidak dipanggil secara eksplisit oleh kode dalam
biner, misalnya, jika kode Anda mendaftar untuk menerima beberapa callback
yang disediakan oleh beberapa layanan.
Jika alwayslink tidak berfungsi dengan VS 2017 di Windows, hal itu disebabkan oleh masalah umum, upgrade VS 2017 Anda ke versi terbaru. |
copts
|
Daftar string; defaultnya adalah
Setiap string dalam atribut ini ditambahkan dalam urutan tertentu ke
Jika paket mendeklarasikan feature
|
defines
|
Daftar string; defaultnya adalah -D dan ditambahkan ke command line kompilasi ke target ini,
serta ke setiap aturan yang bergantung padanya. Berhati-hatilah, karena hal ini dapat berdampak luas. Jika ragu, tambahkan nilai yang ditentukan ke
local_defines .
|
implementation_deps
|
Daftar label; defaultnya adalah deps , header dan jalur include library ini (dan semua
dependensi transitifnya) hanya digunakan untuk kompilasi library ini, dan bukan library yang
bergantung padanya. Library yang ditentukan dengan implementation_deps masih ditautkan dalam
target biner yang bergantung pada library ini.
Untuk saat ini, penggunaan dibatasi untuk cc_libraries dan dilindungi oleh tanda
|
include_prefix
|
String; default-nya adalah Jika ditetapkan, header dalam atribut Awalan dalam atribut |
includes
|
Daftar string; defaultnya adalah
Tunduk pada penggantian "Buat variabel".
Setiap string diawali dengan Header harus ditambahkan ke srcs atau hdrs, jika tidak, header tidak akan tersedia untuk aturan dependen saat kompilasi di-sandbox (default). |
linkopts
|
Daftar string; defaultnya adalah LINKOPTS sebelum
menautkan target biner.
Setiap elemen dalam daftar ini yang tidak diawali dengan |
linkstamp
|
Label; defaultnya adalah base .
|
linkstatic
|
Boolean; defaultnya adalah cc_binary dan
cc_test : tautkan biner dalam mode
statis. Untuk cc_library.linkstatic : lihat di bawah.
Secara default, opsi ini aktif untuk
Jika diaktifkan dan ini adalah biner atau pengujian, opsi ini memberi tahu alat build untuk menautkan
Sebenarnya ada tiga cara berbeda untuk menautkan file yang dapat dieksekusi:
Atribut
Jika |
local_defines
|
Daftar string; defaultnya adalah -D dan ditambahkan ke command line kompilasi untuk target ini,
tetapi tidak untuk dependensinya.
|
nocopts
|
String; default-nya adalah COPTS yang sudah ada dan cocok dengan ekspresi reguler ini
(termasuk nilai yang ditentukan secara eksplisit dalam atribut copts aturan) akan dihapus dari
COPTS untuk tujuan mengompilasi aturan ini.
Atribut ini jarang diperlukan.
|
strip_include_prefix
|
String; default-nya adalah Jika ditetapkan, header dalam atribut Jika berupa jalur relatif, jalur tersebut akan dianggap sebagai jalur relatif paket. Jika berupa jalur absolut, jalur tersebut dipahami sebagai jalur relatif repositori. Awalan dalam atribut |
textual_hdrs
|
Daftar label; defaultnya adalah Ini adalah lokasi untuk mendeklarasikan file header yang tidak dapat dikompilasi sendiri; yaitu, file tersebut harus selalu disertakan secara tekstual oleh file sumber lain untuk membangun kode yang valid. |
win_def_file
|
Label; defaultnya adalah Atribut ini hanya boleh digunakan jika Windows adalah platform target. Opsi ini dapat digunakan untuk mengekspor simbol selama menautkan library bersama. |
cc_proto_library
Lihat sumber aturancc_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
menghasilkan kode C++ dari file .proto
.
deps
harus mengarah ke aturan proto_library
.
Contoh:
cc_library( name = "lib", deps = [":foo_cc_proto"], ) cc_proto_library( name = "foo_cc_proto", deps = [":foo_proto"], ) proto_library( name = "foo_proto", )
Argumen
Atribut | |
---|---|
name |
Nama; wajib Nama unik untuk target ini. |
deps
|
Daftar label; defaultnya adalah proto_library
untuk menghasilkan kode C++.
|
cc_shared_library
Lihat sumber aturancc_shared_library(name, deps, additional_linker_inputs, dynamic_deps, exports_filter, shared_lib_name, tags, user_link_flags, win_def_file)
Tindakan ini menghasilkan library bersama.
Contoh
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"], )
Dalam contoh, foo_shared
menautkan foo
dan baz
secara statis, dengan baz
sebagai dependensi transitif. bar
tidak ditautkan karena sudah disediakan secara dinamis oleh
dynamic_dep
bar_shared
.
foo_shared
menggunakan file *.lds skrip linker untuk mengontrol simbol mana yang harus diekspor. Logika aturan cc_shared_library
tidak mengontrol simbol mana yang diekspor, tetapi hanya menggunakan apa yang diasumsikan diekspor untuk memberikan error selama fase analisis jika dua pustaka bersama mengekspor target yang sama.
Setiap dependensi langsung cc_shared_library
diasumsikan diekspor. Oleh karena itu, selama analisis, Bazel mengasumsikan bahwa foo
diekspor oleh foo_shared
. baz
tidak diasumsikan diekspor
oleh foo_shared
. Setiap target yang cocok dengan exports_filter
juga diasumsikan diekspor.
Setiap cc_library
dalam contoh harus muncul paling banyak di satu
cc_shared_library
. Jika ingin menautkan baz
juga ke
bar_shared
, kita perlu menambahkan
tags = ["LINKABLE_MORE_THAN_ONCE"]
ke baz
.
Karena atribut shared_lib_name
, file yang dihasilkan oleh
bar_shared
akan memiliki nama bar.so
, bukan
nama libbar.so
yang akan dimilikinya secara default di Linux.
Error
Two shared libraries in dependencies export the same symbols.
Hal ini akan terjadi setiap kali Anda membuat target dengan dua dependensi
cc_shared_library
berbeda yang mengekspor target yang sama. Untuk memperbaikinya, Anda harus menghentikan library agar tidak diekspor di salah satu dependensi cc_shared_library
.
Two shared libraries in dependencies link the same library statically
Hal ini akan terjadi setiap kali Anda membuat cc_shared_library
baru dengan dua
dependensi cc_shared_library
berbeda yang menautkan target yang sama secara statis.
Mirip dengan error pada ekspor.
Salah satu cara untuk memperbaikinya adalah dengan berhenti menautkan library ke salah satu dependensi
cc_shared_library
. Pada saat yang sama, yang masih menautkannya
harus mengekspor library agar yang tidak menautkannya tetap dapat melihat
simbol. Cara lainnya adalah dengan menarik library ketiga yang mengekspor target.
Cara ketiga adalah menandai pelaku cc_library
dengan LINKABLE_MORE_THAN_ONCE
tetapi perbaikan ini jarang diperlukan dan Anda harus memastikan bahwa
cc_library
memang aman untuk ditautkan lebih dari sekali.
'//foo:foo' is already linked statically in '//bar:bar' but not exported`
Artinya, library dalam penutupan transitif deps
Anda dapat dijangkau
tanpa melalui salah satu dependensi cc_shared_library
, tetapi sudah
ditautkan ke cc_shared_library
lain di dynamic_deps
dan tidak
diekspor.
Solusinya adalah mengekspornya dari dependensi cc_shared_library
atau menarik
cc_shared_library
ketiga yang mengekspornya.
Do not place libraries which only contain a precompiled dynamic library in deps.
Jika Anda memiliki library dinamis yang telah dikompilasi sebelumnya, library ini tidak perlu dan tidak dapat ditautkan secara statis ke target cc_shared_library
saat ini yang sedang Anda buat. Oleh karena itu, nilai ini tidak termasuk dalam deps
dari
cc_shared_library
. Jika library dinamis yang telah dikompilasi sebelumnya ini adalah dependensi salah satu cc_libraries
Anda, maka cc_library
harus bergantung langsung padanya.
Trying to export a library already exported by a different shared library
Anda akan melihat error ini jika pada aturan saat ini Anda mengklaim akan mengekspor target yang sudah diekspor oleh salah satu dependensi dinamis Anda.
Untuk memperbaikinya, hapus target dari deps
dan hanya mengandalkannya dari dependensi
dinamis atau pastikan exports_filter
tidak menangkap target ini.
Argumen
Atribut | |
---|---|
name |
Nama; wajib Nama unik untuk target ini. |
deps
|
Daftar label; defaultnya adalah
Setiap dependensi library transitif dari dependensi langsung ini akan ditautkan ke library bersama ini selama belum ditautkan oleh
Selama analisis, penerapan aturan akan mempertimbangkan setiap target yang tercantum di
Implementasi ini juga akan memicu error setiap kali library yang sama ditautkan secara statis ke lebih dari satu |
additional_linker_inputs
|
Daftar label; defaultnya adalah user_link_flags .
|
dynamic_deps
|
Daftar label; defaultnya adalah cc_shared_library lain yang bergantung pada target saat ini.
Implementasi |
exports_filter
|
Daftar string; defaultnya adalah
Semua target
Perhatikan bahwa atribut ini sebenarnya tidak menambahkan tepi dependensi ke target tersebut, tepi dependensi harus dibuat oleh Sintaksis berikut diizinkan:
|
shared_lib_name
|
String; default-nya adalah |
user_link_flags
|
Daftar string; defaultnya adalah 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
|
Label; defaultnya adalah Atribut ini hanya boleh digunakan jika Windows adalah platform target. Opsi ini dapat digunakan untuk mengekspor simbol selama penautan library bersama. |
cc_static_library
Lihat sumber aturancc_static_library(name, deps, tags)
Library statis yang dihasilkan berisi file objek target yang tercantum dalam
deps
serta dependensi transitifnya, dengan preferensi diberikan kepada
objek PIC
.
Grup output
linkdeps
File teks yang berisi label dependensi transitif target yang tercantum dalam
deps
yang tidak memberikan file objek apa pun ke library statis, tetapi
menyediakan setidaknya satu library statis, dinamis, atau antarmuka. Library statis yang dihasilkan mungkin memerlukan ketersediaan library ini pada waktu penautan.
linkopts
File teks yang berisi linkopts
yang disediakan pengguna dari semua dependensi transitif target yang tercantum dalam deps
.
Simbol duplikat
Secara default, aturan cc_static_library
memeriksa apakah library statis yang dihasilkan tidak berisi simbol duplikat. Jika ya, build akan gagal dengan pesan error yang mencantumkan simbol duplikat dan file objek yang memuatnya.
Pemeriksaan ini dapat dinonaktifkan per target atau per paket dengan menetapkan
features = ["-symbol_check"]
atau secara global melalui
--features=-symbol_check
.
Dukungan toolchain untuk symbol_check
Toolchain C++ yang dikonfigurasi otomatis dan disertakan dengan Bazel mendukung fitur
symbol_check
di semua platform. Toolchain kustom dapat menambahkan dukungan untuknya dengan salah satu dari dua cara:
- Menerapkan tindakan
ACTION_NAMES.validate_static_library
dan mengaktifkannya dengan fitursymbol_check
. Set alat dalam tindakan dipanggil dengan dua argumen, yaitu library statis untuk memeriksa simbol duplikat dan jalur file yang harus dibuat jika pemeriksaan berhasil. - Fitur
symbol_check
menambahkan flag pengarsip yang menyebabkan tindakan yang membuat library statis gagal pada simbol duplikat.
Argumen
Atribut | |
---|---|
name |
Nama; wajib Nama unik untuk target ini. |
deps
|
Daftar label; defaultnya adalah Dependensi yang tidak menyediakan file objek apa pun tidak disertakan dalam library
statis, tetapi labelnya dikumpulkan dalam file yang disediakan oleh grup output
|
fdo_prefetch_hints
Lihat sumber aturanfdo_prefetch_hints(name, compatible_with, deprecation, distribs, features, licenses, profile, restricted_to, tags, target_compatible_with, testonly, visibility)
Mewakili profil petunjuk pengambilan data FDO yang ada di ruang kerja atau di jalur absolut yang ditentukan. Contoh:
fdo_prefetch_hints( name = "hints", profile = "//path/to/hints:profile.afdo", ) fdo_profile( name = "hints_abs", absolute_path_profile = "/absolute/path/profile.afdo", )
Argumen
Atribut | |
---|---|
name |
Nama; wajib Nama unik untuk target ini. |
profile
|
Label; defaultnya adalah |
fdo_profile
Lihat sumber aturanfdo_profile(name, absolute_path_profile, compatible_with, deprecation, distribs, features, licenses, profile, proto_profile, restricted_to, tags, target_compatible_with, testonly, visibility)
Mewakili profil FDO yang ada di ruang kerja atau di jalur absolut tertentu. Contoh:
fdo_profile( name = "fdo", profile = "//path/to/fdo:profile.zip", ) fdo_profile( name = "fdo_abs", absolute_path_profile = "/absolute/path/profile.zip", )
Argumen
Atribut | |
---|---|
name |
Nama; wajib Nama unik untuk target ini. |
absolute_path_profile
|
String; default-nya adalah |
profile
|
Label; defaultnya adalah |
proto_profile
|
Label; defaultnya adalah |
memprof_profile
Lihat sumber aturanmemprof_profile(name, absolute_path_profile, compatible_with, deprecation, distribs, features, licenses, profile, restricted_to, tags, target_compatible_with, testonly, visibility)
Mewakili profil MEMPROF yang ada di ruang kerja atau di jalur absolut yang ditentukan. Contoh:
memprof_profile( name = "memprof", profile = "//path/to/memprof:profile.afdo", ) memprof_profile( name = "memprof_abs", absolute_path_profile = "/absolute/path/profile.afdo", )
Argumen
Atribut | |
---|---|
name |
Nama; wajib Nama unik untuk target ini. |
absolute_path_profile
|
String; default-nya adalah |
profile
|
Label; defaultnya adalah |
propeller_optimize
Lihat sumber aturanpropeller_optimize(name, compatible_with, deprecation, distribs, features, ld_profile, licenses, restricted_to, tags, target_compatible_with, testonly, visibility)
Mewakili profil pengoptimalan Propeller di ruang kerja. Contoh:
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" )
Argumen
Atribut | |
---|---|
name |
Nama; wajib Nama unik untuk target ini. |
ld_profile
|
Label; defaultnya adalah |
cc_test
Lihat sumber aturancc_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)
Argumen
Atribut | |
---|---|
name |
Nama; wajib Nama unik untuk target ini. |
deps
|
Daftar label; defaultnya adalah Target ini dapat berupa |
srcs
|
Daftar label; defaultnya adalah Semua file File Semua file Jika nama aturan ada di
Jenis file
...dan aturan apa pun yang menghasilkan file tersebut. Ekstensi yang berbeda menunjukkan bahasa pemrograman yang berbeda sesuai dengan konvensi gcc. |
additional_linker_inputs
|
Daftar label; defaultnya adalah Misalnya, file .res Windows yang dikompilasi dapat diberikan di sini untuk disematkan dalam target biner. |
copts
|
Daftar string; defaultnya adalah
Setiap string dalam atribut ini ditambahkan dalam urutan tertentu ke
Jika paket mendeklarasikan feature
|
defines
|
Daftar string; defaultnya adalah -D dan ditambahkan ke command line kompilasi ke target ini,
serta ke setiap aturan yang bergantung padanya. Berhati-hatilah, karena hal ini dapat berdampak luas. Jika ragu, tambahkan nilai yang ditentukan ke
local_defines .
|
includes
|
Daftar string; defaultnya adalah
Tunduk pada penggantian "Buat variabel".
Setiap string diawali dengan Header harus ditambahkan ke srcs atau hdrs, jika tidak, header tidak akan tersedia untuk aturan dependen saat kompilasi di-sandbox (default). |
link_extra_lib
|
Label; defaultnya adalah
Secara default, biner C++ ditautkan dengan |
linkopts
|
Daftar string; defaultnya adalah LINKOPTS sebelum
menautkan target biner.
Setiap elemen dalam daftar ini yang tidak diawali dengan |
linkstatic
|
Boolean; defaultnya adalah cc_binary dan
cc_test : tautkan biner dalam mode
statis. Untuk cc_library.linkstatic : lihat di bawah.
Secara default, opsi ini aktif untuk
Jika diaktifkan dan ini adalah biner atau pengujian, opsi ini memberi tahu alat build untuk menautkan
Sebenarnya ada tiga cara berbeda untuk menautkan file yang dapat dieksekusi:
Atribut
Jika |
local_defines
|
Daftar string; defaultnya adalah -D dan ditambahkan ke command line kompilasi untuk target ini,
tetapi tidak untuk dependensinya.
|
malloc
|
Label; defaultnya adalah
Secara default, biner C++ ditautkan dengan |
nocopts
|
String; default-nya adalah COPTS yang sudah ada dan cocok dengan ekspresi reguler ini
(termasuk nilai yang ditentukan secara eksplisit dalam atribut copts aturan) akan dihapus dari
COPTS untuk tujuan mengompilasi aturan ini.
Atribut ini jarang diperlukan.
|
stamp
|
Bilangan bulat; defaultnya adalah
Biner yang diberi stempel tidak dibangun ulang kecuali jika dependensinya berubah. |
win_def_file
|
Label; defaultnya adalah Atribut ini hanya boleh digunakan jika Windows adalah platform target. Opsi ini dapat digunakan untuk mengekspor simbol selama menautkan library bersama. |
cc_toolchain
Lihat sumber aturancc_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)
Mewakili toolchain C++.
Aturan ini bertanggung jawab untuk:
-
Mengumpulkan semua artefak yang diperlukan agar tindakan C++ dapat berjalan. Hal ini dilakukan oleh
atribut seperti
all_files
,compiler_files
,linker_files
, atau atribut lain yang diakhiri dengan_files
). Atribut ini paling umum berupa filegroup yang menggabungkan semua file yang diperlukan. -
Membuat command line yang benar untuk tindakan C++. Hal ini dilakukan menggunakan
penyedia
CcToolchainConfigInfo
(detail di bawah).
Gunakan atribut toolchain_config
untuk mengonfigurasi toolchain C++.
Lihat juga
halaman
ini untuk mengetahui dokumentasi konfigurasi toolchain C++ dan pemilihan toolchain yang lebih mendalam.
Gunakan tags = ["manual"]
agar toolchain tidak dibangun dan dikonfigurasi
secara tidak perlu saat memanggil bazel build //...
Argumen
Atribut | |
---|---|
name |
Nama; wajib Nama unik untuk target ini. |
all_files
|
Label; wajib Koleksi semua artefak cc_toolchain. Artefak ini akan ditambahkan sebagai input ke semua tindakan terkait rules_cc (kecuali tindakan yang menggunakan set artefak yang lebih presisi dari atribut di bawah). Bazel mengasumsikan bahwaall_files adalah superset
dari semua atribut penyedia artefak lainnya (misalnya, kompilasi linkstamp memerlukan file kompilasi
dan link, sehingga menggunakan all_files ).
Inilah yang ada di |
ar_files
|
Label; defaultnya adalah Kumpulan semua artefak cc_toolchain yang diperlukan untuk tindakan pengarsipan. |
as_files
|
Label; defaultnya adalah Kumpulan semua artefak cc_toolchain yang diperlukan untuk tindakan assembly. |
compiler_files
|
Label; wajib Kumpulan semua artefak cc_toolchain yang diperlukan untuk tindakan kompilasi. |
compiler_files_without_includes
|
Label; defaultnya adalah |
coverage_files
|
Label; defaultnya adalah |
dwp_files
|
Label; wajib Kumpulan semua artefak cc_toolchain yang diperlukan untuk tindakan dwp. |
dynamic_runtime_lib
|
Label; defaultnya adalah Ini akan digunakan saat fitur 'static_link_cpp_runtimes' diaktifkan, dan kita menautkan dependensi secara dinamis. |
exec_transition_for_inputs
|
Boolean; defaultnya adalah |
libc_top
|
Label; defaultnya adalah |
linker_files
|
Label; wajib Kumpulan semua artefak cc_toolchain yang diperlukan untuk tindakan penautan. |
module_map
|
Label; defaultnya adalah |
objcopy_files
|
Label; wajib Kumpulan semua artefak cc_toolchain yang diperlukan untuk tindakan objcopy. |
static_runtime_lib
|
Label; defaultnya adalah Ini akan digunakan saat fitur 'static_link_cpp_runtimes' diaktifkan, dan kita menautkan dependensi secara statis. |
strip_files
|
Label; wajib Kumpulan semua artefak cc_toolchain yang diperlukan untuk tindakan strip. |
supports_header_parsing
|
Boolean; defaultnya adalah |
supports_param_files
|
Boolean; defaultnya adalah |
toolchain_config
|
Label; wajib Label aturan yang menyediakancc_toolchain_config_info .
|
toolchain_identifier
|
String; tidak dapat dikonfigurasi; defaultnya adalah
Hingga masalah #5380 diperbaiki
cara yang direkomendasikan untuk mengaitkan |
cc_toolchain_suite
Lihat sumber aturancc_toolchain_suite(name, compatible_with, deprecation, distribs, features, licenses, restricted_to, tags, target_compatible_with, testonly, toolchains, visibility)
Merepresentasikan kumpulan toolchain C++.
Aturan ini bertanggung jawab untuk:
- Mengumpulkan semua toolchain C++ yang relevan.
-
Memilih satu toolchain bergantung pada opsi
--cpu
dan--compiler
yang diteruskan ke Bazel.
Lihat juga halaman ini untuk mengetahui dokumentasi konfigurasi toolchain C++ dan pemilihan toolchain yang lebih mendalam.
Argumen
Atribut | |
---|---|
name |
Nama; wajib Nama unik untuk target ini. |
toolchains
|
String pemetaan kamus ke label; tidak dapat dikonfigurasi; wajib Peta dari string "<cpu>" atau "<cpu>|<compiler>" ke labelcc_toolchain . "<cpu>" akan digunakan jika hanya --cpu
yang diteruskan ke Bazel, dan "<cpu>|<compiler>" akan digunakan jika --cpu dan --compiler
diteruskan ke Bazel. Contoh:
cc_toolchain_suite( name = "toolchain", toolchains = { "piii|gcc": ":my_cc_toolchain_for_piii_using_gcc", "piii": ":my_cc_toolchain_for_piii_using_default_compiler", }, ) |