Aturan C / C++

Aturan

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

Name; required

Nama unik untuk target ini.

deps

List of labels; optional

Daftar library lain yang akan ditautkan ke target biner.

Dapat berupa cc_library atau objc_library target.

srcs

List of labels; optional

Daftar file C dan C++ yang diproses untuk membuat target. Ini adalah file sumber dan header C/C++, baik tidak dihasilkan (sumber normal kode) atau dibuat.

Semua file .cc, .c, dan .cpp akan dapat dikompilasi. Ini mungkin file yang dihasilkan: jika file bernama ada outs dari beberapa aturan lain, aturan ini akan bergantung secara otomatis pada aturan lain tersebut.

File .h tidak akan dikompilasi, tetapi akan tersedia untuk penyertaan menurut sumber dalam aturan ini. .cc dan File .h dapat langsung menyertakan header yang tercantum dalam srcs ini atau di hdrs aturan apa pun yang tercantum di argumen deps.

Semua file #include hari harus disebutkan dalam srcs dari aturan ini, atau dalam Atribut hdrs dari cc_library() yang direferensikan. Gaya yang direkomendasikan adalah untuk header yang dikaitkan dengan library yang tercantum dalam atribut hdrs library tersebut, dan atribut header yang terkait dengan sumber aturan ini untuk dicantumkan di srcs. Lihat "Pemeriksaan penyertaan header" untuk mendapatkan deskripsi yang lebih detail.

Jika nama aturan ada dalam srcs, maka aturan ini secara otomatis bergantung pada aturan tersebut. Jika outs aturan bernama adalah C atau C++ {i>source file<i}, mereka dikompilasi ke dalam aturan ini; jika itu adalah file perpustakaan, file itu akan ditautkan.

srcs jenis file yang diizinkan:

  • File sumber C dan C++: .c, .cc, .cpp, .cxx, .c++, .C
  • File header C dan C++: .h, .hh, .hpp, .hxx, .inc, .inl, .H
  • Assembler dengan preprocessor C: .S
  • Arsipkan: .a, .pic.a
  • "Selalu tautkan" library: .lo, .pic.lo
  • Pustaka bersama, berversi atau tanpa versi: .so, .so.version
  • File objek: .o, .pic.o

...dan aturan apa pun yang membuat file tersebut. Ekstensi yang berbeda menunjukkan bahasa pemrograman yang berbeda sesuai dengan konvensi gcc.

additional_linker_inputs

List of labels; optional

Teruskan file-file ini ke perintah linker C++.

Misalnya, file .res Windows yang dikompilasi dapat disediakan di sini untuk disematkan pada target biner.

copts

List of strings; optional

Tambahkan opsi ini ke perintah kompilasi C++. Tunduk kepada substitusi "Buat variabel" dan Tokenisasi shell Bourne.

Setiap string dalam atribut ini ditambahkan dalam urutan tertentu ke COPTS sebelum lalu mengompilasi target biner. Tanda hanya berlaku untuk mengompilasi target ini, bukan dependensinya, jadi berhati-hatilah dengan file {i>header<i} yang disertakan di tempat lain. Semua jalur harus relatif terhadap ruang kerja, bukan dengan paket saat ini.

Jika paket mendeklarasikan fitur no_copts_tokenization, tokenisasi shell Bourne hanya berlaku untuk string yang terdiri dari satu kata "Make" variabel.

defines

List of strings; optional

Daftar definisi yang akan ditambahkan ke baris kompilasi. Tunduk kepada "Merek" substitusi variabel dan Tokenisasi shell Bourne. Setiap {i>string<i}, yang harus terdiri dari satu token shell Bourne, diawali dengan -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

List of strings; optional

Daftar include dir yang akan ditambahkan ke baris kompilasi.

Tunduk pada substitusi "Buat variabel". Setiap string diawali dengan -isystem dan ditambahkan ke COPTS. Tidak seperti COPTS, tanda ini ditambahkan untuk aturan ini dan setiap aturan yang bergantung padanya. (Catatan: bukan aturan yang menjadi dependensinya.) Menjadi sangat berhati-hati, karena hal ini dapat menimbulkan jangkauan luas. Jika ragu, tambahkan "-Saya" flag ke COPTS.

Header harus ditambahkan ke src atau hdr. Jika tidak, header tidak akan tersedia untuk dependen aturan saat kompilasi di-sandbox (default).

linkopts

List of strings; optional

Tambahkan flag ini ke perintah linker C++. Tunduk kepada "Merek" substitusi variabel, Tokenisasi shell Bourne dan perluasan label. Setiap string dalam atribut ini ditambahkan ke LINKOPTS sebelum menautkan target biner.

Setiap elemen daftar ini yang tidak diawali dengan $ atau - diasumsikan sebagai label target di deps. Tujuan daftar file yang dihasilkan oleh target tersebut ditambahkan ke penaut lainnya. Error akan dilaporkan jika label tidak valid, atau tidak dideklarasikan di deps.

linkshared

Boolean; optional; nonconfigurable; default is False

Membuat galeri foto bersama. Untuk mengaktifkan atribut ini, sertakan linkshared=True dalam aturan Anda. Secara default opsi ini nonaktif.

Adanya tanda ini berarti penautan terjadi dengan tanda -shared ke gcc, dan library bersama yang dihasilkan cocok untuk dimuat ke dalam contoh program Java. Namun, untuk tujuan build, skrip tidak akan pernah ditautkan ke biner dependen, karena diasumsikan bahwa perpustakaan bersama dibangun dengan Aturan cc_binary hanya dimuat secara manual oleh program lain, jadi library ini tidak boleh dianggap sebagai pengganti cc_library aturan. Demi skalabilitas, sebaiknya hindari pendekatan ini sama sekali dan hanya dengan mengizinkan java_library bergantung pada aturan cc_library sebagai gantinya.

Jika Anda menentukan linkopts=['-static'] dan linkshared=True, Anda mendapatkan satu unit yang benar-benar mandiri. Jika Anda menentukan linkstatic=True dan linkshared=True, Anda akan mendapatkan satu, sebagian besar yang berdiri sendiri.

linkstatic

Boolean; optional; default is True

Untuk cc_binary dan cc_test: menautkan biner secara statis mode. Untuk cc_library.linkstatic: lihat di bawah.

Secara default, opsi ini aktif untuk cc_binary dan nonaktif untuk lainnya.

Jika diaktifkan dan ini adalah biner atau pengujian, opsi ini memberi tahu alat build untuk menautkan .a, bukan .so, untuk library pengguna jika memungkinkan. Beberapa pustaka sistem mungkin masih ditautkan secara dinamis, seperti pustaka yang tidak ada library statis. Jadi, file yang dapat dieksekusi yang dihasilkan akan tetap dinamis tertaut, oleh karena itu hanya sebagian besar statis.

Sebenarnya ada tiga cara untuk menautkan {i>executable<i}:

  • STATIC dengan fitur full_static_link, di mana semuanya ditautkan secara statis; mis. "gcc -static foo.o libbar.a libbaz.a -lm".
    Mode ini diaktifkan dengan menetapkan fully_static_link pada features.
  • STATIC, di mana semua pustaka pengguna ditautkan secara statis (jika baru tersedia), tetapi jika library sistem (tidak termasuk library runtime C/C++) tertaut secara dinamis, mis. "gcc foo.o libfoo.a libbaz.a -lm".
    Mode ini diaktifkan dengan menetapkan linkstatic=True.
  • DINAMIS, yang semua library ditautkan secara dinamis (jika versi dinamis tersedia), mis. "gcc foo.o libfoo.so libbaz.so -lm".
    Mode ini diaktifkan dengan menetapkan linkstatic=False.

Atribut linkstatic memiliki arti yang berbeda jika digunakan pada cc_library(). Untuk library C++, linkstatic=True menunjukkan bahwa hanya penautan statis diizinkan, jadi tidak ada .so yang akan dihasilkan. linkstatic=False melakukan tidak mencegah pembuatan pustaka statis. Atribut ini dimaksudkan untuk mengontrol pembuatan library dinamis.

Jika linkstatic=False, alat build akan membuat symlink ke bergantung pada library bersama di area *.runfiles.

local_defines

List of strings; optional

Daftar definisi yang akan ditambahkan ke baris kompilasi. Tunduk kepada "Merek" substitusi variabel dan Tokenisasi shell Bourne. Setiap {i>string<i}, yang harus terdiri dari satu token shell Bourne, diawali dengan -D dan ditambahkan ke command line kompilasi untuk target ini, tetapi tidak kepada tanggungannya.
malloc

Label; optional; default is @bazel_tools//tools/cpp:malloc

Mengganti dependensi default pada malloc.

Secara default, biner C++ ditautkan ke //tools/cpp:malloc, yang merupakan {i>library<i} kosong sehingga biner akhirnya menggunakan libc malloc. Label ini harus merujuk pada cc_library. Jika kompilasi ditujukan untuk non-C++ aturan ini, opsi ini tidak akan berpengaruh. Nilai atribut ini diabaikan jika linkshared=True ditentukan.

nocopts

String; optional

Menghapus opsi yang cocok dari perintah kompilasi C++. Tunduk kepada "Merek" variabel. Nilai atribut ini ditafsirkan sebagai ekspresi reguler. Semua 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

Integer; optional; default is -1

Apakah ingin mengenkode informasi build ke dalam biner. Nilai yang mungkin:
  • stamp = 1: Selalu tambahkan informasi build ke dalam biner, bahkan dalam --nostamp build. Ini harus dihindari, karena berpotensi mematikan caching jarak jauh untuk biner dan tindakan downstream apa pun yang bergantung padanya.
  • stamp = 0: Selalu ganti informasi build dengan nilai konstanta. Ini memberikan cache hasil build yang baik.
  • stamp = -1: Penyematan informasi build dikontrol oleh Tanda --[no]stamp.

Biner yang distempel tidak dibangun ulang kecuali jika dependensinya berubah.

win_def_file

Label; optional

File DEF Windows yang akan diteruskan ke penaut.

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,
)
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 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",
)
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
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,
)
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,
)

Argumen

Atribut
name

Name; required

Nama unik untuk target ini.

hdrs

List of labels; optional

Daftar file {i>header<i} yang diterbitkan oleh pustaka yang dikompilasi sebelumnya ini agar langsung disertakan oleh sumber dalam aturan yang bergantung.

Boolean; optional; default is False

Jika 1, biner yang bergantung (langsung atau tidak langsung) pada C++ ini prakompilasi akan menautkan semua file objek yang diarsipkan di pustaka statis, bahkan jika beberapa di antaranya tidak memiliki 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.

interface_library

Label; optional

Satu library antarmuka untuk menautkan library bersama.

Jenis file yang diizinkan: .ifso, .tbd, .lib, .so atau .dylib

shared_library

Label; optional

Satu library bersama yang telah dikompilasi sebelumnya. Bazel memastikan aplikasi tersebut tersedia untuk biner yang bergantung padanya selama runtime.

Jenis file yang diizinkan: .so, .dll atau .dylib

static_library

Label; optional

Satu library statis yang telah dikompilasi sebelumnya.

Jenis file yang diizinkan: .a, .pic.a atau .lib

system_provided

Boolean; optional; default is False

Jika 1, artinya library bersama yang diperlukan saat runtime disediakan oleh sistem. Di beberapa dalam hal ini, interface_library harus ditentukan dan shared_library harus kosong.

cc_library

cc_library(name, deps, srcs, data, hdrs, additional_compiler_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 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 filePenyertaan yang diizinkan
foo.hbar.h
foo.cc{i>foo.h bar.h<i}
bar.hbar-impl.h baz.h
baris-impl.hbar.h baz.h
bar.ccbar.h bar-impl.h baz.h
baz.hBaz-impl.h
Baz-impl.hbaz.h
baz.ccbaz.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

Name; required

Nama unik untuk target ini.

deps

List of labels; optional

Daftar library lain yang akan ditautkan ke target biner.

Dapat berupa cc_library atau objc_library target.

srcs

List of labels; optional

Daftar file C dan C++ yang diproses untuk membuat target. Ini adalah file sumber dan header C/C++, baik tidak dihasilkan (sumber normal kode) atau dibuat.

Semua file .cc, .c, dan .cpp akan dapat dikompilasi. Ini mungkin file yang dihasilkan: jika file bernama ada outs dari beberapa aturan lain, aturan ini akan bergantung secara otomatis pada aturan lain tersebut.

File .h tidak akan dikompilasi, tetapi akan tersedia untuk penyertaan menurut sumber dalam aturan ini. .cc dan File .h dapat langsung menyertakan header yang tercantum dalam srcs ini atau di hdrs aturan apa pun yang tercantum di argumen deps.

Semua file #include hari harus disebutkan dalam srcs dari aturan ini, atau dalam Atribut hdrs dari cc_library() yang direferensikan. Gaya yang direkomendasikan adalah untuk header yang dikaitkan dengan library yang tercantum dalam atribut hdrs library tersebut, dan atribut header yang terkait dengan sumber aturan ini untuk dicantumkan di srcs. Lihat "Pemeriksaan penyertaan header" untuk mendapatkan deskripsi yang lebih detail.

Jika nama aturan ada dalam srcs, maka aturan ini secara otomatis bergantung pada aturan tersebut. Jika outs aturan bernama adalah C atau C++ {i>source file<i}, mereka dikompilasi ke dalam aturan ini; jika itu adalah file perpustakaan, file itu akan ditautkan.

srcs jenis file yang diizinkan:

  • File sumber C dan C++: .c, .cc, .cpp, .cxx, .c++, .C
  • File header C dan C++: .h, .hh, .hpp, .hxx, .inc, .inl, .H
  • Assembler dengan preprocessor C: .S
  • Arsipkan: .a, .pic.a
  • "Selalu tautkan" library: .lo, .pic.lo
  • Pustaka bersama, berversi atau tanpa versi: .so, .so.version
  • File objek: .o, .pic.o

...dan aturan apa pun yang membuat file tersebut. Ekstensi yang berbeda menunjukkan bahasa pemrograman yang berbeda sesuai dengan konvensi gcc.

hdrs

List of labels; optional

Daftar file {i>header<i} yang diterbitkan oleh library ini agar disertakan langsung oleh sumber dalam aturan dependen.

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 srcs, meskipun atribut tersebut disertakan oleh {i>header <i}yang diterbitkan. Lihat "Penyertaan header memeriksa" untuk mengetahui deskripsi lebih mendetail.

additional_compiler_inputs

List of labels; optional

File tambahan apa pun yang mungkin ingin Anda teruskan ke command line compiler, seperti sanitizer daftar yang diabaikan. File yang ditentukan di sini kemudian dapat digunakan di Copt dengan fungsi $(location).

Boolean; optional; default is False

Jika 1, biner yang bergantung (langsung atau tidak langsung) pada C++ ini {i>library<i} akan menautkan semua file objek untuk file yang tercantum dalam 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

List of strings; optional

Tambahkan opsi ini ke perintah kompilasi C++. Tunduk kepada substitusi "Buat variabel" dan Tokenisasi shell Bourne.

Setiap string dalam atribut ini ditambahkan dalam urutan tertentu ke COPTS sebelum lalu mengompilasi target biner. Tanda hanya berlaku untuk mengompilasi target ini, bukan dependensinya, jadi berhati-hatilah dengan file {i>header<i} yang disertakan di tempat lain. Semua jalur harus relatif terhadap ruang kerja, bukan dengan paket saat ini.

Jika paket mendeklarasikan fitur no_copts_tokenization, tokenisasi shell Bourne hanya berlaku untuk string yang terdiri dari satu kata "Make" variabel.

defines

List of strings; optional

Daftar definisi yang akan ditambahkan ke baris kompilasi. Tunduk kepada "Merek" substitusi variabel dan Tokenisasi shell Bourne. Setiap {i>string<i}, yang harus terdiri dari satu token shell Bourne, diawali dengan -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

List of labels; optional

Daftar library lain yang menjadi target library. Tidak seperti dengan 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 --experimental_cc_implementation_deps.

include_prefix

String; optional

Awalan yang akan ditambahkan ke jalur header aturan ini.

Jika ditetapkan, header di atribut hdrs pada aturan ini dapat diakses at adalah nilai atribut ini yang ditambahkan ke jalur relatif repositorinya.

Awalan dalam atribut strip_include_prefix dihapus sebelum tindakan ini ditambahkan.

includes

List of strings; optional

Daftar include dir yang akan ditambahkan ke baris kompilasi.

Tunduk pada substitusi "Buat variabel". Setiap string diawali dengan -isystem dan ditambahkan ke COPTS. Tidak seperti COPTS, tanda ini ditambahkan untuk aturan ini dan setiap aturan yang bergantung padanya. (Catatan: bukan aturan yang menjadi dependensinya.) Menjadi sangat berhati-hati, karena hal ini dapat menimbulkan jangkauan luas. Jika ragu, tambahkan "-Saya" flag ke COPTS.

Header harus ditambahkan ke src atau hdr. Jika tidak, header tidak akan tersedia untuk dependen aturan saat kompilasi di-sandbox (default).

linkopts

List of strings; optional

Tambahkan flag ini ke perintah linker C++. Tunduk kepada "Merek" substitusi variabel, Tokenisasi shell Bourne dan perluasan label. Setiap string dalam atribut ini ditambahkan ke LINKOPTS sebelum menautkan target biner.

Setiap elemen daftar ini yang tidak diawali dengan $ atau - diasumsikan sebagai label target di deps. Tujuan daftar file yang dihasilkan oleh target tersebut ditambahkan ke penaut lainnya. Error akan dilaporkan jika label tidak valid, atau tidak dideklarasikan di deps.

linkstamp

Label; optional

Secara bersamaan mengompilasi dan menautkan file sumber C++ yang ditentukan ke instance biner. Tipuan ini diperlukan untuk memperkenalkan stempel waktu informasi ke dalam biner; jika kita mengompilasi file sumber ke file objek dengan cara biasa, stempel waktunya akan salah. Kompilasi linkstamp mungkin tidak menyertakan serangkaian flag compiler dan tidak boleh bergantung pada header, opsi compiler, atau variabel build lainnya. Opsi ini hanya diperlukan di base.
linkstatic

Boolean; optional; default is False

Untuk cc_binary dan cc_test: menautkan biner secara statis mode. Untuk cc_library.linkstatic: lihat di bawah.

Secara default, opsi ini aktif untuk cc_binary dan nonaktif untuk lainnya.

Jika diaktifkan dan ini adalah biner atau pengujian, opsi ini memberi tahu alat build untuk menautkan .a, bukan .so, untuk library pengguna jika memungkinkan. Beberapa pustaka sistem mungkin masih ditautkan secara dinamis, seperti pustaka yang tidak ada library statis. Jadi, file yang dapat dieksekusi yang dihasilkan akan tetap dinamis tertaut, oleh karena itu hanya sebagian besar statis.

Sebenarnya ada tiga cara untuk menautkan {i>executable<i}:

  • STATIC dengan fitur full_static_link, di mana semuanya ditautkan secara statis; mis. "gcc -static foo.o libbar.a libbaz.a -lm".
    Mode ini diaktifkan dengan menetapkan fully_static_link pada features.
  • STATIC, di mana semua pustaka pengguna ditautkan secara statis (jika baru tersedia), tetapi jika library sistem (tidak termasuk library runtime C/C++) tertaut secara dinamis, mis. "gcc foo.o libfoo.a libbaz.a -lm".
    Mode ini diaktifkan dengan menetapkan linkstatic=True.
  • DINAMIS, yang semua library ditautkan secara dinamis (jika versi dinamis tersedia), mis. "gcc foo.o libfoo.so libbaz.so -lm".
    Mode ini diaktifkan dengan menetapkan linkstatic=False.

Atribut linkstatic memiliki arti yang berbeda jika digunakan pada cc_library(). Untuk library C++, linkstatic=True menunjukkan bahwa hanya penautan statis diizinkan, jadi tidak ada .so yang akan dihasilkan. linkstatic=False melakukan tidak mencegah pembuatan pustaka statis. Atribut ini dimaksudkan untuk mengontrol pembuatan library dinamis.

Jika linkstatic=False, alat build akan membuat symlink ke bergantung pada library bersama di area *.runfiles.

local_defines

List of strings; optional

Daftar definisi yang akan ditambahkan ke baris kompilasi. Tunduk kepada "Merek" substitusi variabel dan Tokenisasi shell Bourne. Setiap {i>string<i}, yang harus terdiri dari satu token shell Bourne, diawali dengan -D dan ditambahkan ke command line kompilasi untuk target ini, tetapi tidak kepada tanggungannya.
nocopts

String; optional

Menghapus opsi yang cocok dari perintah kompilasi C++. Tunduk kepada "Merek" variabel. Nilai atribut ini ditafsirkan sebagai ekspresi reguler. Semua 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

String; optional

Awalan yang akan dihapus dari jalur header aturan ini.

Jika ditetapkan, header di atribut hdrs pada aturan ini dapat diakses di jalurnya dengan potongan awalan ini.

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 include_prefix ditambahkan setelah awalan ini dihilangkan.

textual_hdrs

List of labels; optional

Daftar file {i>header<i} yang diterbitkan oleh library ini agar disertakan secara tekstual oleh sumber dalam aturan dependen.

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

Label; optional

File DEF Windows yang akan diteruskan ke penaut.

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

Name; required

Nama unik untuk target ini.

deps

List of labels; optional

Daftar 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

Name; required

Nama unik untuk target ini.

profile

Label; optional

Label profil petunjuk. File petunjuk memiliki ekstensi .afdo Label juga dapat mengarah ke aturan fdo_absolute_path_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

Name; required

Nama unik untuk target ini.

absolute_path_profile

String; optional

Jalur absolut ke profil FDO. File FDO dapat memiliki salah satu ekstensi berikut: .profraw untuk profil LLVM yang tidak diindeks, .profdata untuk profil LLVM terindeks, .zip yang memiliki profil {i>profraw <i}LLVM, atau {i> .afdo<i} untuk profil AutoFDO.
profile

Label; optional

Label profil FDO atau aturan yang membuatnya. File FDO dapat memiliki salah satu ekstensi berikut: .profraw untuk profil LLVM yang tidak diindeks, .profdata untuk LLVM yang diindeks {i>.zip<i} yang menyimpan profil profraw LLVM, .afdo untuk profil AutoFDO, {i>.xfdo<i} untuk Profil XBinary. Label juga dapat mengarah ke aturan fdo_absolute_path_profile.
proto_profile

Label; optional

Label profil protobuf.

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

Name; required

Nama unik untuk target ini.

ld_profile

Label; optional

Label profil yang diteruskan ke tindakan penautan. File ini memiliki ekstensi {i> .txt<i}.

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

Name; required

Nama unik untuk target ini.

deps

List of labels; optional

Daftar library lain yang akan ditautkan ke target biner.

Dapat berupa cc_library atau objc_library target.

srcs

List of labels; optional

Daftar file C dan C++ yang diproses untuk membuat target. Ini adalah file sumber dan header C/C++, baik tidak dihasilkan (sumber normal kode) atau dibuat.

Semua file .cc, .c, dan .cpp akan dapat dikompilasi. Ini mungkin file yang dihasilkan: jika file bernama ada outs dari beberapa aturan lain, aturan ini akan bergantung secara otomatis pada aturan lain tersebut.

File .h tidak akan dikompilasi, tetapi akan tersedia untuk penyertaan menurut sumber dalam aturan ini. .cc dan File .h dapat langsung menyertakan header yang tercantum dalam srcs ini atau di hdrs aturan apa pun yang tercantum di argumen deps.

Semua file #include hari harus disebutkan dalam srcs dari aturan ini, atau dalam Atribut hdrs dari cc_library() yang direferensikan. Gaya yang direkomendasikan adalah untuk header yang dikaitkan dengan library yang tercantum dalam atribut hdrs library tersebut, dan atribut header yang terkait dengan sumber aturan ini untuk dicantumkan di srcs. Lihat "Pemeriksaan penyertaan header" untuk mendapatkan deskripsi yang lebih detail.

Jika nama aturan ada dalam srcs, maka aturan ini secara otomatis bergantung pada aturan tersebut. Jika outs aturan bernama adalah C atau C++ {i>source file<i}, mereka dikompilasi ke dalam aturan ini; jika itu adalah file perpustakaan, file itu akan ditautkan.

srcs jenis file yang diizinkan:

  • File sumber C dan C++: .c, .cc, .cpp, .cxx, .c++, .C
  • File header C dan C++: .h, .hh, .hpp, .hxx, .inc, .inl, .H
  • Assembler dengan preprocessor C: .S
  • Arsipkan: .a, .pic.a
  • "Selalu tautkan" library: .lo, .pic.lo
  • Pustaka bersama, berversi atau tanpa versi: .so, .so.version
  • File objek: .o, .pic.o

...dan aturan apa pun yang membuat file tersebut. Ekstensi yang berbeda menunjukkan bahasa pemrograman yang berbeda sesuai dengan konvensi gcc.

additional_linker_inputs

List of labels; optional

Teruskan file-file ini ke perintah linker C++.

Misalnya, file .res Windows yang dikompilasi dapat disediakan di sini untuk disematkan pada target biner.

copts

List of strings; optional

Tambahkan opsi ini ke perintah kompilasi C++. Tunduk kepada substitusi "Buat variabel" dan Tokenisasi shell Bourne.

Setiap string dalam atribut ini ditambahkan dalam urutan tertentu ke COPTS sebelum lalu mengompilasi target biner. Tanda hanya berlaku untuk mengompilasi target ini, bukan dependensinya, jadi berhati-hatilah dengan file {i>header<i} yang disertakan di tempat lain. Semua jalur harus relatif terhadap ruang kerja, bukan dengan paket saat ini.

Jika paket mendeklarasikan fitur no_copts_tokenization, tokenisasi shell Bourne hanya berlaku untuk string yang terdiri dari satu kata "Make" variabel.

defines

List of strings; optional

Daftar definisi yang akan ditambahkan ke baris kompilasi. Tunduk kepada "Merek" substitusi variabel dan Tokenisasi shell Bourne. Setiap {i>string<i}, yang harus terdiri dari satu token shell Bourne, diawali dengan -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

List of strings; optional

Daftar include dir yang akan ditambahkan ke baris kompilasi.

Tunduk pada substitusi "Buat variabel". Setiap string diawali dengan -isystem dan ditambahkan ke COPTS. Tidak seperti COPTS, tanda ini ditambahkan untuk aturan ini dan setiap aturan yang bergantung padanya. (Catatan: bukan aturan yang menjadi dependensinya.) Menjadi sangat berhati-hati, karena hal ini dapat menimbulkan jangkauan luas. Jika ragu, tambahkan "-Saya" flag ke COPTS.

Header harus ditambahkan ke src atau hdr. Jika tidak, header tidak akan tersedia untuk dependen aturan saat kompilasi di-sandbox (default).

linkopts

List of strings; optional

Tambahkan flag ini ke perintah linker C++. Tunduk kepada "Merek" substitusi variabel, Tokenisasi shell Bourne dan perluasan label. Setiap string dalam atribut ini ditambahkan ke LINKOPTS sebelum menautkan target biner.

Setiap elemen daftar ini yang tidak diawali dengan $ atau - diasumsikan sebagai label target di deps. Tujuan daftar file yang dihasilkan oleh target tersebut ditambahkan ke penaut lainnya. Error akan dilaporkan jika label tidak valid, atau tidak dideklarasikan di deps.

linkstatic

Boolean; optional; default is False

Untuk cc_binary dan cc_test: menautkan biner secara statis mode. Untuk cc_library.linkstatic: lihat di bawah.

Secara default, opsi ini aktif untuk cc_binary dan nonaktif untuk lainnya.

Jika diaktifkan dan ini adalah biner atau pengujian, opsi ini memberi tahu alat build untuk menautkan .a, bukan .so, untuk library pengguna jika memungkinkan. Beberapa pustaka sistem mungkin masih ditautkan secara dinamis, seperti pustaka yang tidak ada library statis. Jadi, file yang dapat dieksekusi yang dihasilkan akan tetap dinamis tertaut, oleh karena itu hanya sebagian besar statis.

Sebenarnya ada tiga cara untuk menautkan {i>executable<i}:

  • STATIC dengan fitur full_static_link, di mana semuanya ditautkan secara statis; mis. "gcc -static foo.o libbar.a libbaz.a -lm".
    Mode ini diaktifkan dengan menetapkan fully_static_link pada features.
  • STATIC, di mana semua pustaka pengguna ditautkan secara statis (jika baru tersedia), tetapi jika library sistem (tidak termasuk library runtime C/C++) tertaut secara dinamis, mis. "gcc foo.o libfoo.a libbaz.a -lm".
    Mode ini diaktifkan dengan menetapkan linkstatic=True.
  • DINAMIS, yang semua library ditautkan secara dinamis (jika versi dinamis tersedia), mis. "gcc foo.o libfoo.so libbaz.so -lm".
    Mode ini diaktifkan dengan menetapkan linkstatic=False.

Atribut linkstatic memiliki arti yang berbeda jika digunakan pada cc_library(). Untuk library C++, linkstatic=True menunjukkan bahwa hanya penautan statis diizinkan, jadi tidak ada .so yang akan dihasilkan. linkstatic=False melakukan tidak mencegah pembuatan pustaka statis. Atribut ini dimaksudkan untuk mengontrol pembuatan library dinamis.

Jika linkstatic=False, alat build akan membuat symlink ke bergantung pada library bersama di area *.runfiles.

local_defines

List of strings; optional

Daftar definisi yang akan ditambahkan ke baris kompilasi. Tunduk kepada "Merek" substitusi variabel dan Tokenisasi shell Bourne. Setiap {i>string<i}, yang harus terdiri dari satu token shell Bourne, diawali dengan -D dan ditambahkan ke command line kompilasi untuk target ini, tetapi tidak kepada tanggungannya.
malloc

Label; optional; default is @bazel_tools//tools/cpp:malloc

Mengganti dependensi default pada malloc.

Secara default, biner C++ ditautkan ke //tools/cpp:malloc, yang merupakan {i>library<i} kosong sehingga biner akhirnya menggunakan libc malloc. Label ini harus merujuk pada cc_library. Jika kompilasi ditujukan untuk non-C++ aturan ini, opsi ini tidak akan berpengaruh. Nilai atribut ini diabaikan jika linkshared=True ditentukan.

nocopts

String; optional

Menghapus opsi yang cocok dari perintah kompilasi C++. Tunduk kepada "Merek" variabel. Nilai atribut ini ditafsirkan sebagai ekspresi reguler. Semua 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

Integer; optional; default is 0

Apakah ingin mengenkode informasi build ke dalam biner. Nilai yang mungkin:
  • stamp = 1: Selalu tambahkan informasi build ke dalam biner, bahkan dalam --nostamp build. Ini harus dihindari, karena berpotensi mematikan caching jarak jauh untuk biner dan tindakan downstream apa pun yang bergantung padanya.
  • stamp = 0: Selalu ganti informasi build dengan nilai konstanta. Ini memberikan cache hasil build yang baik.
  • stamp = -1: Penyematan informasi build dikontrol oleh Tanda --[no]stamp.

Biner yang distempel tidak dibangun ulang kecuali jika dependensinya berubah.

win_def_file

Label; optional

File DEF Windows yang akan diteruskan ke penaut.

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

Name; required

Nama unik untuk target ini.

all_files

Label; required

Koleksi semua artefak cc_toolchain. Artefak ini akan ditambahkan sebagai input ke semua tindakan terkait rules_cc (kecuali tindakan yang menggunakan kumpulan artefak dari atribut di bawah). Bazel menganggap all_files adalah superset dari semua atribut penyedia artefak lainnya (mis., kompilasi linkstamp membutuhkan kompilasi dan menautkan file, sehingga memerlukan all_files).

Itulah isi cc_toolchain.files, dan ini digunakan oleh semua Starlark menggunakan toolchain C++.

ar_files

Label; optional

Koleksi semua artefak cc_toolchain yang diperlukan untuk tindakan pengarsipan.

as_files

Label; optional

Koleksi semua artefak cc_ toolchain yang diperlukan untuk tindakan assembly.

compiler

String; optional; nonconfigurable

Tidak digunakan lagi. Sebagai gantinya, gunakan atribut 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

Label; required

Koleksi semua artefak cc_toolchain yang diperlukan untuk tindakan kompilasi.
compiler_files_without_includes

Label; optional

Koleksi semua artefak cc_ toolchain yang diperlukan untuk tindakan kompilasi jika penemuan input didukung (saat ini khusus Google).
coverage_files

Label; optional

Koleksi semua artefak cc_toolchain yang diperlukan untuk tindakan cakupan. Jika tidak ditentukan, {i>all_file<i} digunakan.
cpu

String; optional; nonconfigurable

Tidak digunakan lagi. Sebagai gantinya, gunakan atribut 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.

dwp_files

Label; required

Koleksi semua artefak cc_toolchain yang diperlukan untuk tindakan dwp.
dynamic_runtime_lib

Label; optional

Artefak library dinamis untuk library runtime C++ (misalnya mdpi++.so).

Ini akan digunakan saat 'static_link_cpp_runtimes' diaktifkan, dan kami menautkan dependensi secara dinamis.

exec_transition_for_inputs

Boolean; optional; default is True

Setel ke Benar (True) untuk membangun semua input file ke cc_ toolchain untuk platform exec, alih-alih tidak memiliki transisi (yaitu platform target secara default).
libc_top

Label; optional

Kumpulan artefak untuk libc yang diteruskan sebagai input untuk mengompilasi/menautkan tindakan.
linker_files

Label; required

Koleksi semua artefak cc_ toolchain yang diperlukan untuk menautkan tindakan.
module_map

Label; optional

Artefak peta modul yang akan digunakan untuk build modular.
objcopy_files

Label; required

Koleksi semua artefak cc_toolchain yang diperlukan untuk tindakan objcopy.
static_runtime_lib

Label; optional

Artefak library statis untuk library runtime C++ (misalnya mdpi++.a).

Ini akan digunakan saat 'static_link_cpp_runtimes' diaktifkan, dan kami menautkan dependensi secara statis.

strip_files

Label; required

Koleksi semua artefak cc_toolchain yang diperlukan untuk tindakan strip.
supports_header_parsing

Boolean; optional; default is False

Tetapkan ke Benar jika cc_toolchain mendukung tindakan penguraian header.
supports_param_files

Boolean; optional; default is True

Setel ke Benar (True) jika cc_ toolchain mendukung penggunaan file param untuk menautkan tindakan.
toolchain_config

Label; required

Label aturan yang menyediakan cc_toolchain_config_info.
toolchain_identifier

String; optional; nonconfigurable

ID yang digunakan untuk cocok dengan cc_toolchain ini dengan ID crosstool_config.toolchain.

Hingga masalah #5380 diperbaiki ini adalah cara yang direkomendasikan untuk mengaitkan cc_toolchain dengan CROSSTOOL.toolchain. Tema ini akan diganti dengan toolchain_config (#5380).

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

Name; required

Nama unik untuk target ini.

toolchains

Dictionary mapping strings to labels; required; nonconfigurable

Peta dari "<cpu>" atau "<cpu>|<compiler>" {i>string<i} ke label 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",
            },
          )