Aturan
- cc_binary
- cc_import
- cc_library
- cc_proto_library
- cc_shared_library
- fdo_prefetch_hints
- fdo_profile
- propeller_optimize
- cc_test
- cc_toolchain
- cc_funnel_suite
cc_biner
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, 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 strip tambahan dapat diberikan pada 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. Lain-lain: file kosong.
Argumen
Atribut | |
---|---|
name |
Nama unik untuk target ini. |
deps
|
Ini bisa berupa target |
srcs
|
Semua file File Semua file Jika nama aturan ada di
Jenis file
...dan aturan apa pun yang membuat file tersebut. Ekstensi yang berbeda menunjukkan bahasa pemrograman yang berbeda sesuai dengan konvensi gcc. |
additional_linker_inputs
|
Misalnya, file .res Windows yang dikompilasi dapat disediakan di sini untuk disematkan dalam target biner. |
copts
|
Setiap string dalam atribut ini ditambahkan dalam urutan yang diberikan ke
Jika paket mendeklarasikan fitur
|
defines
|
-D dan ditambahkan ke command line kompilasi ke target ini,
serta setiap aturan yang bergantung padanya. Berhati-hatilah karena hal ini mungkin memiliki efek yang luas. Jika ragu, tambahkan nilai yang ditentukan ke local_defines .
|
includes
|
Tunduk pada substitusi "Buat variabel".
Setiap string diawali dengan Header harus ditambahkan ke src atau hdr, jika tidak, header tersebut tidak akan tersedia untuk aturan dependen saat kompilasi di-sandbox (default). |
linkopts
|
LINKOPTS sebelum
menautkan target biner.
Setiap elemen daftar ini yang tidak dimulai dengan |
linkshared
|
linkshared=True dalam aturan Anda. Secara default, opsi ini nonaktif.
Adanya flag ini berarti bahwa penautan terjadi dengan flag
Jika menentukan |
linkstatic
|
cc_binary dan
cc_test : tautkan biner dalam mode
statis. Untuk cc_library.linkstatic : lihat di bawah.
Secara default, opsi ini diaktifkan untuk
Jika diaktifkan dan ini adalah biner atau pengujian, opsi ini akan memberi tahu alat build untuk menautkan ke
Ada tiga cara yang berbeda untuk menautkan file yang dapat dieksekusi:
Atribut
Jika |
local_defines
|
-D dan ditambahkan ke command line kompilasi untuk target ini,
tetapi tidak ke turunannya.
|
malloc
|
Secara default, biner C++ ditautkan ke |
nocopts
|
COPTS yang sudah ada yang cocok dengan ekspresi reguler ini
(termasuk nilai yang secara eksplisit ditentukan dalam atribut copts aturan) akan dihapus dari
COPTS untuk tujuan mengompilasi aturan ini.
Atribut ini jarang diperlukan.
|
stamp
|
Biner yang distempel tidak dibuat ulang kecuali jika dependensinya berubah. |
win_def_file
|
Atribut ini hanya boleh digunakan jika Windows adalah platform targetnya. API ini dapat digunakan untuk mengekspor simbol selama menautkan library bersama. |
cc_impor
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 untuk mengimpor library C/C++ yang telah dikompilasi sebelumnya.
Berikut adalah kasus penggunaan standar:
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, )2. Menautkan library bersama (Unix)
cc_import( name = "mylib", hdrs = ["mylib.h"], shared_library = "libmylib.so", )3. Menautkan library bersama dengan library antarmuka (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. Menautkan library bersama dengan
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. Menautkan ke library statis atau bersama
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, )Di 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
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 unik untuk target ini. |
deps
|
deps di Atribut umum yang ditentukan oleh sebagian besar aturan build.
|
hdrs
|
|
alwayslink
|
Jika selalu link tidak berfungsi dengan VS 2017 di Windows, yang disebabkan oleh masalah umum, upgrade VS 2017 ke versi terbaru. |
interface_library
|
Jenis file yang diizinkan:
|
shared_library
|
Jenis file yang diizinkan:
|
static_library
|
Jenis file yang diizinkan:
|
system_provided
|
interface_library harus ditentukan dan
shared_library harus kosong.
|
cc_library
Lihat sumber aturancc_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)
Pemeriksaan penyertaan header
Semua file header yang digunakan dalam build harus dideklarasikan dalam aturan hdrs
atau
srcs
dari cc_*
. Tindakan ini diterapkan.
Untuk aturan cc_library
, header di hdrs
terdiri dari antarmuka publik
library dan dapat langsung disertakan dari file di hdrs
dan
srcs
library itu sendiri serta dari file di hdrs
dan
srcs
dari aturan cc_*
yang mencantumkan library di deps
miliknya.
Header dalam srcs
hanya boleh disertakan secara langsung dari file dalam hdrs
dan srcs
pada library itu sendiri. Saat memutuskan apakah akan menempatkan header ke
hdrs
atau srcs
, Anda harus bertanya apakah Anda ingin konsumen library ini
dapat langsung menyertakannya. Ini kira-kira keputusan yang sama 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 di srcs
.
Untuk menggambarkan 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
.
Menyertakan file | Penyertaan yang diizinkan |
---|---|
foo.h | batang |
foo.cc | foo.h batang.h |
batang | bar-impl.h baz.h |
batang-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-impl.h |
Aturan pemeriksaan penyertaan hanya berlaku untuk penyertaan
langsung. Dalam contoh di atas, foo.cc
diizinkan untuk menyertakan bar.h
, yang dapat mencakup baz.h
, yang nantinya 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 di penutupan deps
transitif. Dalam
hal ini, compiler dapat membaca baz.h
dan baz-impl.h
saat mengompilasi foo.cc
, tetapi foo.cc
tidak boleh
berisi #include "baz.h"
. Agar
diizinkan, baz
harus ditambahkan ke deps
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 unik untuk target ini. |
deps
|
Ini bisa berupa target |
srcs
|
Semua file File Semua file Jika nama aturan ada di
Jenis file
...dan aturan apa pun yang membuat file tersebut. Ekstensi yang berbeda menunjukkan bahasa pemrograman yang berbeda sesuai dengan konvensi gcc. |
hdrs
|
Ini adalah lokasi yang lebih disukai untuk mendeklarasikan file header yang
menjelaskan antarmuka untuk library. Header ini akan
disediakan untuk penyertaan oleh sumber dalam aturan ini atau dalam aturan dependen.
Header yang tidak dimaksudkan untuk disertakan oleh klien library ini harus
tercantum dalam atribut |
alwayslink
|
srcs , meskipun beberapa di antaranya tidak berisi simbol yang direferensikan oleh biner.
Hal ini berguna jika kode Anda tidak secara eksplisit dipanggil oleh kode dalam biner, misalnya, jika kode Anda mendaftar untuk menerima beberapa callback yang disediakan oleh beberapa layanan.
Jika selalu link tidak berfungsi dengan VS 2017 di Windows, yang disebabkan oleh masalah umum, upgrade VS 2017 ke versi terbaru. |
copts
|
Setiap string dalam atribut ini ditambahkan dalam urutan yang diberikan ke
Jika paket mendeklarasikan fitur
|
defines
|
-D dan ditambahkan ke command line kompilasi ke target ini,
serta setiap aturan yang bergantung padanya. Berhati-hatilah karena hal ini mungkin memiliki efek yang luas. Jika ragu, tambahkan nilai yang ditentukan ke local_defines .
|
implementation_deps
|
deps , header dan jalur penyertaan 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_library dan dilindungi oleh flag
|
include_prefix
|
Jika ditetapkan, header dalam atribut Awalan dalam atribut |
includes
|
Tunduk pada substitusi "Buat variabel".
Setiap string diawali dengan Header harus ditambahkan ke src atau hdr, jika tidak, header tersebut tidak akan tersedia untuk aturan dependen saat kompilasi di-sandbox (default). |
linkopts
|
LINKOPTS sebelum
menautkan target biner.
Setiap elemen daftar ini yang tidak dimulai dengan |
linkstamp
|
base .
|
linkstatic
|
cc_binary dan
cc_test : tautkan biner dalam mode
statis. Untuk cc_library.linkstatic : lihat di bawah.
Secara default, opsi ini diaktifkan untuk
Jika diaktifkan dan ini adalah biner atau pengujian, opsi ini akan memberi tahu alat build untuk menautkan ke
Ada tiga cara yang berbeda untuk menautkan file yang dapat dieksekusi:
Atribut
Jika |
local_defines
|
-D dan ditambahkan ke command line kompilasi untuk target ini,
tetapi tidak ke turunannya.
|
nocopts
|
COPTS yang sudah ada yang cocok dengan ekspresi reguler ini
(termasuk nilai yang secara eksplisit ditentukan dalam atribut copts aturan) akan dihapus dari
COPTS untuk tujuan mengompilasi aturan ini.
Atribut ini jarang diperlukan.
|
strip_include_prefix
|
Jika disetel, header dalam atribut Jika itu adalah jalur relatif, jalur tersebut akan diambil sebagai jalur relatif paket. Jika bersifat mutlak, kolom ini akan dipahami sebagai jalur relatif repositori. Awalan dalam atribut |
textual_hdrs
|
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 membuat kode yang valid. |
win_def_file
|
Atribut ini hanya boleh digunakan jika Windows adalah platform targetnya. API 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 unik untuk target ini. |
deps
|
proto_library untuk menghasilkan kode C++.
|
cc_library_bersama
Lihat sumber aturancc_shared_library(name, deps, additional_linker_inputs, dynamic_deps, exports_filter, shared_lib_name, tags, user_link_flags, win_def_file)
Alat 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 secara statis foo
dan baz
, yang terakhir menjadi dependensi transitif. Ini tidak
menautkan bar
karena sudah disediakan secara dinamis oleh
dynamic_dep
bar_shared
.
foo_shared
menggunakan skrip *.lds skrip penaut 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 library bersama mengekspor
target yang sama.
Setiap dependensi langsung cc_shared_library
diasumsikan sebagai hasil ekspor. Oleh karena itu, Bazel mengasumsikan selama analisis bahwa foo
sedang
diekspor oleh foo_shared
. baz
tidak diasumsikan sebagai hasil ekspor
oleh foo_shared
. Setiap target yang cocok dengan exports_filter
juga diasumsikan telah diekspor.
Setiap cc_library
dalam contoh harus muncul paling banyak dalam satu
cc_shared_library
. Jika ingin menautkan baz
juga ke
bar_shared
, kita harus 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
yang berbeda yang mengekspor target yang sama. Untuk mengatasi hal ini,
Anda harus menghentikan library agar tidak diekspor dalam 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 terkait ekspor.
Salah satu cara untuk memperbaikinya adalah dengan berhenti menautkan library ke dalam salah satu
dependensi cc_shared_library
. Pada saat yang sama, situs yang masih menautkan library tersebut
harus mengekspor library sehingga library yang tidak menautkannya akan tetap mempertahankan visibilitas ke
simbol. Cara lainnya adalah dengan menarik library ketiga yang mengekspor target.
Cara ketiga adalah memberi tag penyebab cc_library
dengan LINKABLE_MORE_THAN_ONCE
,
tetapi perbaikan ini akan jarang terjadi dan Anda harus benar-benar memastikan bahwa
cc_library
tersebut benar-benar 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
yang berbeda dalam dynamic_deps
dan tidak
diekspor.
Solusinya adalah mengekspornya dari dependensi cc_shared_library
atau mengambil 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, variabel ini tidak termasuk dalam deps
dari
cc_shared_library
. Jika library dinamis yang telah dikompilasi ini merupakan dependensi dari salah satu
cc_libraries
Anda, cc_library
perlu bergantung padanya
secara langsung.
Trying to export a library already exported by a different shared library
Anda akan melihat error ini jika pada aturan saat ini Anda mengklaim untuk mengekspor target yang sudah diekspor oleh salah satu dependensi dinamis Anda.
Untuk memperbaikinya, hapus target dari deps
dan cukup andalkan targetnya dari dependensi dinamis,
atau pastikan exports_filter
tidak menangkap target ini.
Argumen
Atribut | |
---|---|
name |
Nama unik untuk target ini. |
deps
|
Setiap dependensi library transitif dari dependensi langsung ini akan ditautkan ke library bersama ini,
selama belum ditautkan oleh
Selama analisis, penerapan aturan akan menganggap setiap target yang tercantum dalam
Implementasi juga akan memicu error setiap kali library yang sama ditautkan secara statis ke lebih dari satu |
additional_linker_inputs
|
user_link_flags .
|
dynamic_deps
|
cc_shared_library lain yang menjadi dependensi target saat ini.
Implementasi |
exports_filter
|
Semua target
Perhatikan bahwa atribut ini sebenarnya tidak menambahkan tepi dependensi ke target tersebut, tepi dependensi seharusnya dibuat oleh Sintaksis berikut diizinkan:
|
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
|
Atribut ini hanya boleh digunakan jika Windows adalah platform targetnya. API ini dapat digunakan untuk mengekspor simbol selama menautkan library bersama. |
fdo_prefetch_hints
Lihat sumber aturanfdo_prefetch_hints(name, compatible_with, deprecation, distribs, features, licenses, profile, restricted_to, tags, target_compatible_with, testonly, visibility)
Merepresentasikan 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 unik untuk target ini. |
profile
|
|
profil_fdo
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 yang ditentukan. 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 unik untuk target ini. |
absolute_path_profile
|
|
profile
|
|
proto_profile
|
|
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 unik untuk target ini. |
ld_profile
|
|
uji_cc
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, 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 unik untuk target ini. |
deps
|
Ini bisa berupa target |
srcs
|
Semua file File Semua file Jika nama aturan ada di
Jenis file
...dan aturan apa pun yang membuat file tersebut. Ekstensi yang berbeda menunjukkan bahasa pemrograman yang berbeda sesuai dengan konvensi gcc. |
additional_linker_inputs
|
Misalnya, file .res Windows yang dikompilasi dapat disediakan di sini untuk disematkan dalam target biner. |
copts
|
Setiap string dalam atribut ini ditambahkan dalam urutan yang diberikan ke
Jika paket mendeklarasikan fitur
|
defines
|
-D dan ditambahkan ke command line kompilasi ke target ini,
serta setiap aturan yang bergantung padanya. Berhati-hatilah karena hal ini mungkin memiliki efek yang luas. Jika ragu, tambahkan nilai yang ditentukan ke local_defines .
|
includes
|
Tunduk pada substitusi "Buat variabel".
Setiap string diawali dengan Header harus ditambahkan ke src atau hdr, jika tidak, header tersebut tidak akan tersedia untuk aturan dependen saat kompilasi di-sandbox (default). |
linkopts
|
LINKOPTS sebelum
menautkan target biner.
Setiap elemen daftar ini yang tidak dimulai dengan |
linkstatic
|
cc_binary dan
cc_test : tautkan biner dalam mode
statis. Untuk cc_library.linkstatic : lihat di bawah.
Secara default, opsi ini diaktifkan untuk
Jika diaktifkan dan ini adalah biner atau pengujian, opsi ini akan memberi tahu alat build untuk menautkan ke
Ada tiga cara yang berbeda untuk menautkan file yang dapat dieksekusi:
Atribut
Jika |
local_defines
|
-D dan ditambahkan ke command line kompilasi untuk target ini,
tetapi tidak ke turunannya.
|
malloc
|
Secara default, biner C++ ditautkan ke |
nocopts
|
COPTS yang sudah ada yang cocok dengan ekspresi reguler ini
(termasuk nilai yang secara eksplisit ditentukan dalam atribut copts aturan) akan dihapus dari
COPTS untuk tujuan mengompilasi aturan ini.
Atribut ini jarang diperlukan.
|
stamp
|
Biner yang distempel tidak dibuat ulang kecuali jika dependensinya berubah. |
win_def_file
|
Atribut ini hanya boleh digunakan jika Windows adalah platform targetnya. API ini dapat digunakan untuk mengekspor simbol selama menautkan library bersama. |
cc_jaringan
Lihat sumber aturancc_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)
Mewakili toolchain C++.
Aturan ini bertanggung jawab atas:
-
Mengumpulkan semua artefak yang diperlukan agar tindakan C++ dapat berjalan. Hal ini dilakukan dengan atribut seperti
all_files
,compiler_files
,linker_files
, atau atribut lain yang diakhiri dengan_files
). Jenis file ini paling sering digunakan untuk mengelompokkan semua file yang diperlukan. -
Menghasilkan 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 konfigurasi toolchain C++ yang rumit dan dokumentasi pemilihan toolchain.
Gunakan tags = ["manual"]
untuk mencegah toolchain dibuat dan dikonfigurasi
secara tidak perlu saat memanggil bazel build //...
Argumen
Atribut | |
---|---|
name |
Nama unik untuk target ini. |
all_files
|
all_files adalah superset dari semua atribut lain yang menyediakan artefak (misalnya, kompilasi linktamp memerlukan file kompilasi dan link, sehingga diperlukan all_files ).
Ini adalah isi dari |
ar_files
|
Koleksi semua artefak cc_ toolchain yang diperlukan untuk tindakan pengarsipan. |
as_files
|
Koleksi semua artefak cc_ toolchain yang diperlukan untuk tindakan perakitan. |
compiler
|
toolchain_identifier . Penginstalan ini akan menjadi no
setelah
migrasi CROSSTOOL ke Starlark
, dan akan dihapus pada
#7075.
Jika ditetapkan, kebijakan ini akan digunakan untuk melakukan pemilihan crosstool_config.Toolchain. Versi ini akan lebih diprioritaskan daripada opsi --cpu Bazel. |
compiler_files
|
|
compiler_files_without_includes
|
|
coverage_files
|
|
cpu
|
Jika ditetapkan, kebijakan ini akan digunakan untuk melakukan pemilihan crosstool_config.Toolchain. Versi ini akan lebih diprioritaskan daripada opsi --cpu Bazel. |
dwp_files
|
|
dynamic_runtime_lib
|
Ini akan digunakan saat fitur 'static_link_cpp_runtimes' diaktifkan, dan kami akan menautkan dependensi secara dinamis. |
exec_transition_for_inputs
|
|
libc_top
|
|
linker_files
|
|
module_map
|
|
objcopy_files
|
|
static_runtime_lib
|
Ini akan digunakan saat fitur 'static_link_cpp_runtimes' diaktifkan, dan kami menautkan dependensi secara statis. |
strip_files
|
|
supports_header_parsing
|
|
supports_param_files
|
|
toolchain_config
|
cc_toolchain_config_info .
|
toolchain_identifier
|
Hingga masalah #5380 diperbaiki
ini adalah cara yang direkomendasikan untuk mengaitkan |
rangkaian_suite_cc
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 atas:
- 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 konfigurasi toolchain C++ yang rumit dan dokumentasi pemilihan toolchain.
Argumen
Atribut | |
---|---|
name |
Nama unik untuk target ini. |
toolchains
|
cc_toolchain . "<cpu>" akan digunakan saat hanya --cpu
yang diteruskan ke Bazel, dan "<cpu>|<compiler>" akan digunakan saat
--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", }, ) |