Aturan
- cc_binary
- cc_import
- cc_library
- cc_proto_library
- fdo_prefetch_hints
- fdo_profile
- propeller_optimize
- cc_test
- cc_toolchain
- cc_toolchain_suite
cc_binary
cc_binary(name, deps, srcs, data, additional_linker_inputs, args, compatible_with, copts, defines, deprecation, distribs, env, exec_compatible_with, exec_properties, features, includes, licenses, linkopts, linkshared, linkstatic, local_defines, malloc, nocopts, output_licenses, restricted_to, stamp, tags, target_compatible_with, testonly, toolchains, visibility, win_def_file)
Target output implisit
name.stripped
(hanya dibuat jika diminta secara eksplisit): Hapus versi dari biner.strip -g
dijalankan pada biner untuk menghapus debug simbol. Opsi strip tambahan dapat diberikan pada baris perintah menggunakan--stripopt=-foo
. Output ini hanya dibuat jika diminta secara eksplisit.name.dwp
(hanya dibuat jika diminta secara eksplisit): Jika Fission diaktifkan: debug paket informasi yang cocok untuk men-debug biner yang di-deploy dari jarak jauh. Lainnya: file kosong.
Argumen
Atribut | |
---|---|
name |
Nama unik untuk target ini. |
deps
|
Dapat berupa |
srcs
|
Semua file File Semua file Jika nama aturan ada dalam
...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 pada target biner. |
copts
|
Setiap string dalam atribut ini ditambahkan dalam urutan tertentu ke
Jika paket mendeklarasikan fitur
|
defines
|
-D dan ditambahkan ke command line kompilasi ke target ini,
serta setiap aturan yang bergantung padanya. Hati-hati, karena
hal ini mungkin
berdampak luas. Jika ragu, tambahkan nilai {i>define <i}ke
local_defines saja.
|
includes
|
Tunduk pada substitusi "Buat variabel".
Setiap string diawali dengan Header harus ditambahkan ke src atau hdr. Jika tidak, header tidak akan tersedia untuk dependen aturan saat kompilasi di-sandbox (default). |
linkopts
|
LINKOPTS sebelum
menautkan target biner.
Setiap elemen daftar ini yang tidak diawali dengan |
linkshared
|
linkshared=True dalam aturan Anda. Secara default
opsi ini nonaktif.
Adanya tanda ini berarti penautan terjadi dengan tanda
Jika Anda menentukan |
linkstatic
|
cc_binary dan
cc_test : menautkan biner secara statis
mode. 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 untuk menautkan {i>executable<i}:
Atribut
Jika |
local_defines
|
-D dan ditambahkan ke command line kompilasi untuk target ini,
tetapi tidak kepada tanggungannya.
|
malloc
|
Secara default, biner C++ ditautkan ke |
nocopts
|
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 kompilasi aturan ini.
Atribut ini jarang diperlukan.
|
stamp
|
Biner yang distempel tidak dibangun ulang kecuali jika dependensinya berubah. |
win_def_file
|
Atribut ini hanya boleh digunakan jika Windows adalah platform target. Template ini dapat digunakan untuk ekspor simbol selama menautkan galeri foto bersama. |
cc_import
cc_import(name, data, hdrs, alwayslink, compatible_with, deprecation, distribs, features, interface_library, licenses, restricted_to, shared_library, static_library, system_provided, tags, target_compatible_with, testonly, visibility)
Aturan cc_import
memungkinkan pengguna mengimpor library C/C++ yang telah dikompilasi sebelumnya.
Berikut ini adalah kasus penggunaan umum:
Akun Layanan 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 a import library for mylib.dll which will be passed to linker interface_library = "mylib.lib", # mylib.dll will be available for runtime shared_library = "mylib.dll", )
system_provided=True
(Windows)
cc_import( name = "mylib", hdrs = ["mylib.h"], # mylib.lib is an import library for mylib.dll which will be passed to linker interface_library = "mylib.lib", # mylib.dll is provided by system environment, for example it can be found in PATH. # This indicates that Bazel is not responsible for making mylib.dll available. system_provided = 1, )
Pada 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, )
Argumen
Atribut | |
---|---|
name |
Nama unik untuk target ini. |
hdrs
|
|
alwayslink
|
Jika alwayslink tidak berfungsi dengan VS 2017 di Windows, hal ini disebabkan oleh masalah umum, upgrade VS 2017 Anda 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
cc_library(name, deps, srcs, data, hdrs, alwayslink, compatible_with, copts, defines, deprecation, distribs, exec_compatible_with, exec_properties, features, implementation_deps, include_prefix, includes, licenses, linkopts, linkstamp, linkstatic, local_defines, nocopts, restricted_to, strip_include_prefix, tags, target_compatible_with, testonly, textual_hdrs, toolchains, visibility, win_def_file)
Pemeriksaan penyertaan header
Semua file header yang digunakan dalam build harus dideklarasikan dalam hdrs
atau
srcs
dari cc_*
aturan. Hal ini diberlakukan.
Untuk aturan cc_library
, header di hdrs
terdiri dari antarmuka publik
library dan dapat langsung disertakan baik dari file dalam hdrs
maupun
srcs
library itu sendiri serta dari file dalam hdrs
dan
srcs
dari cc_*
aturan yang mencantumkan library di deps
.
Header di srcs
hanya boleh disertakan langsung dari file di hdrs
dan srcs
library itu sendiri. Saat memutuskan apakah akan
menempatkan {i>header<i} ke dalam
hdrs
atau srcs
, Anda harus bertanya apakah Anda ingin menjadi konsumen library ini
untuk dapat langsung menyertakannya. Ini kurang lebih sama dengan keputusan antara
Visibilitas public
dan private
dalam bahasa pemrograman.
Aturan cc_binary
dan cc_test
tidak memiliki antarmuka yang diekspor, sehingga keduanya
juga tidak memiliki atribut hdrs
. Semua header yang termasuk dalam biner atau pengujian
secara langsung harus tercantum dalam 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
bukan baz.h
.
Menyertakan file | Penyertaan yang diizinkan |
---|---|
foo.h | bar.h |
foo.cc | {i>foo.h bar.h<i} |
bar.h | bar-impl.h baz.h |
baris-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 langsung
penyertaan/penyertaan. Dalam contoh di atas, foo.cc
diizinkan untuk
menyertakan bar.h
, yang mungkin mencakup baz.h
, yang dalam
belokan diizinkan menyertakan baz-impl.h
. Secara teknis,
kompilasi file .cc
dapat menyertakan header apa pun secara transitif
file di hdrs
atau srcs
di
cc_library
apa pun dalam penutupan deps
transitif. Di beberapa
dalam hal ini, compiler dapat membaca baz.h
dan baz-impl.h
saat mengompilasi foo.cc
, namun foo.cc
tidak boleh
berisi #include "baz.h"
. Agar dapat
diizinkan, baz
harus ditambahkan ke deps
dari foo
.
Sayangnya, Bazel saat ini tidak dapat membedakan antara langsung dan transitif
sehingga tidak dapat mendeteksi kasus {i>error<i} yang mana file secara ilegal menyertakan
secara langsung yang hanya diizinkan untuk disertakan secara transitif. Misalnya,
Bazel tidak akan mengeluh jika dalam contoh di atas foo.cc
secara langsung
mencakup baz.h
. Ini dianggap ilegal, karena foo
tidak bergantung pada baz
secara langsung. Saat ini, tidak ada error yang dihasilkan
dalam kasus tersebut, tetapi pemeriksaan {i>error<i} tersebut
mungkin akan ditambahkan di masa mendatang.
Argumen
Atribut | |
---|---|
name |
Nama unik untuk target ini. |
deps
|
Dapat berupa |
srcs
|
Semua file File Semua file Jika nama aturan ada dalam
...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 sangat disukai untuk mendeklarasikan file {i>header<i} yang
menjelaskan antarmuka {i>library<i}. {i>Header<i} ini akan dibuat
tersedia untuk disertakan oleh sumber dalam aturan ini atau 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 dirujuk oleh biner.
Fungsi ini berguna jika kode Anda tidak secara eksplisit dipanggil oleh kode di
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 ini disebabkan oleh masalah umum, upgrade VS 2017 Anda ke versi terbaru. |
copts
|
Setiap string dalam atribut ini ditambahkan dalam urutan tertentu ke
Jika paket mendeklarasikan fitur
|
defines
|
-D dan ditambahkan ke command line kompilasi ke target ini,
serta setiap aturan yang bergantung padanya. Hati-hati, karena
hal ini mungkin
berdampak luas. Jika ragu, tambahkan nilai {i>define <i}ke
local_defines saja.
|
implementation_deps
|
deps , header dan sertakan jalur library ini (dan semua
dependensi transitif) hanya digunakan untuk kompilasi library ini, bukan library yang
yang bergantung pada {i>database.<i} Library yang ditentukan dengan implementation_deps masih ditautkan
target biner yang bergantung pada library ini.
Untuk saat ini, penggunaan dibatasi pada cc_libraries dan dilindungi oleh tanda
|
include_prefix
|
Jika ditetapkan, header di atribut Awalan dalam atribut |
includes
|
Tunduk pada substitusi "Buat variabel".
Setiap string diawali dengan Header harus ditambahkan ke src atau hdr. Jika tidak, header tidak akan tersedia untuk dependen aturan saat kompilasi di-sandbox (default). |
linkopts
|
LINKOPTS sebelum
menautkan target biner.
Setiap elemen daftar ini yang tidak diawali dengan |
linkstamp
|
base .
|
linkstatic
|
cc_binary dan
cc_test : menautkan biner secara statis
mode. 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 untuk menautkan {i>executable<i}:
Atribut
Jika |
local_defines
|
-D dan ditambahkan ke command line kompilasi untuk target ini,
tetapi tidak kepada tanggungannya.
|
nocopts
|
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 kompilasi aturan ini.
Atribut ini jarang diperlukan.
|
strip_include_prefix
|
Jika ditetapkan, header di atribut Jika jalur relatif, maka akan diambil sebagai jalur yang relatif terhadap paket. Jika nilai itu adalah mutlak, itu dipahami sebagai jalur relatif repositori. Awalan dalam atribut |
textual_hdrs
|
Ini adalah lokasi untuk mendeklarasikan file {i>header<i} yang tidak dapat dikompilasi sendiri; yaitu, mereka selalu perlu disertakan secara tekstual oleh file sumber lain untuk membuat pada kode sumber. |
win_def_file
|
Atribut ini hanya boleh digunakan jika Windows adalah platform target. Template ini dapat digunakan untuk ekspor simbol selama menautkan galeri foto bersama. |
cc_proto_library
cc_proto_library(name, deps, data, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, features, licenses, restricted_to, tags, target_compatible_with, testonly, visibility)
cc_proto_library
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
aturan untuk menghasilkan kode C++.
|
fdo_prefetch_hints
fdo_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 absolut. 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
|
|
fdo_profile
fdo_profile(name, absolute_path_profile, compatible_with, deprecation, distribs, features, licenses, profile, proto_profile, restricted_to, tags, target_compatible_with, testonly, visibility)
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
propeller_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
|
|
cc_test
cc_test(name, deps, srcs, data, additional_linker_inputs, args, compatible_with, copts, defines, deprecation, distribs, env, env_inherit, exec_compatible_with, exec_properties, features, flaky, includes, licenses, linkopts, linkstatic, local, local_defines, malloc, nocopts, restricted_to, shard_count, size, stamp, tags, target_compatible_with, testonly, timeout, toolchains, visibility, win_def_file)
Argumen
Atribut | |
---|---|
name |
Nama unik untuk target ini. |
deps
|
Dapat berupa |
srcs
|
Semua file File Semua file Jika nama aturan ada dalam
...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 pada target biner. |
copts
|
Setiap string dalam atribut ini ditambahkan dalam urutan tertentu ke
Jika paket mendeklarasikan fitur
|
defines
|
-D dan ditambahkan ke command line kompilasi ke target ini,
serta setiap aturan yang bergantung padanya. Hati-hati, karena
hal ini mungkin
berdampak luas. Jika ragu, tambahkan nilai {i>define <i}ke
local_defines saja.
|
includes
|
Tunduk pada substitusi "Buat variabel".
Setiap string diawali dengan Header harus ditambahkan ke src atau hdr. Jika tidak, header tidak akan tersedia untuk dependen aturan saat kompilasi di-sandbox (default). |
linkopts
|
LINKOPTS sebelum
menautkan target biner.
Setiap elemen daftar ini yang tidak diawali dengan |
linkstatic
|
cc_binary dan
cc_test : menautkan biner secara statis
mode. 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 untuk menautkan {i>executable<i}:
Atribut
Jika |
local_defines
|
-D dan ditambahkan ke command line kompilasi untuk target ini,
tetapi tidak kepada tanggungannya.
|
malloc
|
Secara default, biner C++ ditautkan ke |
nocopts
|
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 kompilasi aturan ini.
Atribut ini jarang diperlukan.
|
stamp
|
Biner yang distempel tidak dibangun ulang kecuali jika dependensinya berubah. |
win_def_file
|
Atribut ini hanya boleh digunakan jika Windows adalah platform target. Template ini dapat digunakan untuk ekspor simbol selama menautkan galeri foto bersama. |
cc_toolchain
cc_toolchain(name, all_files, ar_files, as_files, compatible_with, compiler, compiler_files, compiler_files_without_includes, coverage_files, cpu, deprecation, distribs, dwp_files, dynamic_runtime_lib, exec_transition_for_inputs, features, libc_top, licenses, linker_files, module_map, objcopy_files, restricted_to, static_runtime_lib, strip_files, supports_header_parsing, supports_param_files, tags, target_compatible_with, testonly, toolchain_config, toolchain_identifier, visibility)
Merepresentasikan toolchain C++.
Aturan ini bertanggung jawab untuk:
-
Mengumpulkan semua artefak yang diperlukan untuk menjalankan tindakan C++. Hal ini dilakukan dengan
seperti
all_files
,compiler_files
,linker_files
, atau atribut lainnya yang diakhiri dengan_files
). Berikut adalah paling sering {i>filegroup<i} menggabungkan semua file yang diperlukan. -
Membuat command line yang benar untuk tindakan C++. Hal ini dilakukan dengan
Penyedia
CcToolchainConfigInfo
(detail di bawah).
Gunakan atribut toolchain_config
untuk mengonfigurasi toolchain C++.
Lihat juga ini
halaman
untuk konfigurasi toolchain C++ dan dokumentasi pemilihan toolchain yang rumit.
Menggunakan tags = ["manual"]
untuk mencegah toolchain dibuat dan dikonfigurasi
tidak perlu saat memanggil bazel build //...
Argumen
Atribut | |
---|---|
name |
Nama unik untuk target ini. |
all_files
|
all_files adalah superset
dari semua atribut penyedia artefak lainnya (mis., kompilasi linkstamp membutuhkan kompilasi
dan menautkan file, sehingga memerlukan all_files ).
Itulah isi |
ar_files
|
Koleksi semua artefak cc_ toolchain yang diperlukan untuk pengarsipan tindakan. |
as_files
|
Koleksi semua artefak cc_toolchain yang diperlukan untuk tindakan assembly. |
compiler
|
toolchain_identifier . Ini akan menjadi noop
setelah
Migrasi CROSSTOOL ke Starlark
, dan akan dihapus oleh
#7075.
Jika ditetapkan, kolom tersebut akan digunakan untuk melakukan pemilihan crosstool_config.toolchain. Perlu waktu prioritas atas --cpu opsi Bazel. |
compiler_files
|
|
compiler_files_without_includes
|
|
coverage_files
|
|
cpu
|
Jika ditetapkan, kolom tersebut akan digunakan untuk melakukan pemilihan crosstool_config.toolchain. Perlu waktu prioritas atas --cpu opsi Bazel. |
dwp_files
|
|
dynamic_runtime_lib
|
Ini akan digunakan saat 'static_link_cpp_runtimes' diaktifkan, dan kami menautkan dependensi secara dinamis. |
exec_transition_for_inputs
|
|
libc_top
|
|
linker_files
|
|
module_map
|
|
objcopy_files
|
|
static_runtime_lib
|
Ini akan digunakan saat '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 |
cc_toolchain_suite
cc_toolchain_suite(name, compatible_with, deprecation, distribs, features, licenses, restricted_to, tags, target_compatible_with, testonly, toolchains, visibility)
Mewakili kumpulan toolchain C++.
Aturan ini bertanggung jawab untuk:
- Mengumpulkan semua toolchain C++ yang relevan.
-
Memilih satu toolchain bergantung pada opsi
--cpu
dan--compiler
diteruskan ke Bazel.
Lihat juga ini halaman untuk konfigurasi toolchain C++ dan dokumentasi pemilihan toolchain yang rumit.
Argumen
Atribut | |
---|---|
name |
Nama unik untuk target ini. |
toolchains
|
cc_toolchain . "<cpu>" akan digunakan saat --cpu saja
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", }, ) |