BazelCon 2022 akan hadir pada 16-17 November ke New York dan online.
Daftar sekarang.

Aturan C / C ++

Tetap teratur dengan koleksi Simpan dan kategorikan konten berdasarkan preferensi Anda.

Aturan

bin_cc

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): 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. Else: 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.

Ini dapat berupa target cc_library atau objc_library.

srcs

List of labels; optional

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

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

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

Semua file #include harus disebutkan dalam atribut srcs dari aturan ini, atau dalam atribut hdrs dari cc_library() yang direferensikan. Gaya yang direkomendasikan adalah untuk header yang terkait dengan library yang akan dicantumkan dalam atribut hdrs library, dan header lainnya yang terkait dengan sumber aturan ini untuk dicantumkan dalam srcs. Lihat "Pemeriksaan penyertaan header" untuk deskripsi yang lebih mendetail.

Jika nama aturan ada dalam srcs, aturan ini otomatis bergantung pada aturan tersebut. Jika outs aturan bernama adalah file sumber C atau C++, aturan tersebut akan dikompilasi ke dalam aturan ini; jika file tersebut adalah file library, file tersebut 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 praprosesor C: .S
  • Arsipkan: .a, .pic.a
  • "Selalu tautkan" perpustakaan: .lo, .pic.lo
  • Pustaka bersama, berversi atau tidak berversi: .so, .so.version
  • File objek: .o, .pic.o

...dan aturan apa pun yang menghasilkan 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 ke target biner.

copts

List of strings; optional

Tambahkan opsi ini ke perintah kompilasi C++. Tunduk pada substitusi "Makevariable" dan tokenisasi shell Bourne.

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

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

defines

List of strings; optional

Daftar definisi yang akan ditambahkan ke baris kompilasi. Tunduk pada substitusi "Make" variabel dan tokenisasi shell Bourne. Setiap string, yang harus terdiri dari satu token shell Bourne, diawali dengan -D dan ditambahkan ke command line kompilasi ke target ini, serta ke setiap aturan yang bergantung padanya. Hati-hati, karena ini mungkin memiliki efek yang luas. Jika ragu, tambahkan nilai yang ditentukan ke local_defines.
includes

List of strings; optional

Daftar disc penyertaan 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 pada aturan tersebut. (Catatan: bukan aturan yang diperlukan!) Berhati-hatilah, karena ini mungkin memiliki efek yang luas. Jika ragu, tambahkan flag "-I" sebagai gantinya COPTS.

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

linkopts

List of strings; optional

Tambahkan tanda ini ke perintah linker C++. Tunduk pada substitusi "Make" 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 dalam deps. Daftar file yang dihasilkan oleh target tersebut ditambahkan ke opsi linker. Error 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 tidak aktif.

Kehadiran tanda ini berarti bahwa penautan terjadi dengan flag -shared ke gcc, dan library bersama yang dihasilkan cocok untuk dimuat, misalnya program Java. Namun, untuk tujuan build, library ini tidak akan pernah ditautkan ke biner biner, karena diasumsikan bahwa library bersama yang di-build dengan aturan cc_binary hanya dimuat secara manual oleh program lain, sehingga tidak boleh dianggap sebagai pengganti aturan cc_library. Untuk skalabilitas, sebaiknya hindari pendekatan ini sepenuhnya dan biarkan java_library bergantung pada aturan cc_library saja.

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

linkstatic

Boolean; optional; default is True

Untuk cc_binary dan cc_test: tautkan biner dalam mode statis. Untuk cc_library.linkstatic: lihat di bawah.

Secara default, opsi ini diaktifkan untuk cc_binary dan dinonaktifkan untuk sisanya.

Jika diaktifkan dan ini adalah biner atau pengujian, opsi ini akan memberi tahu alat build untuk menautkan di .a, bukan .so untuk library pengguna, jika memungkinkan. Beberapa library sistem mungkin masih ditautkan secara dinamis, begitu juga dengan library yang tidak memiliki library statis. Jadi, file yang dapat dieksekusi yang dihasilkan akan tetap ditautkan secara dinamis, sehingga hanya sebagian besar statis.

Ada tiga cara untuk menautkan file executable:

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

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

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

local_defines

List of strings; optional

Daftar definisi yang akan ditambahkan ke baris kompilasi. Tunduk pada substitusi "Make" variabel dan tokenisasi shell Bourne. Setiap string, yang harus terdiri dari satu token shell Bourne, ditambahkan dengan -D dan ditambahkan ke command line kompilasi untuk target ini, tetapi tidak ke dependensinya.
malloc

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

Ganti dependensi default di malloc.

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

nocopts

String; optional

Hapus opsi pencocokan dari perintah kompilasi C++. Sesuai dengan substitusi "Make" variabel. Nilai atribut ini diinterpretasikan sebagai ekspresi reguler. Setiap COPTS yang ada sebelumnya 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

Integer; optional; default is -1

Apakah akan mengenkode informasi build ke dalam biner. Kemungkinan nilai:
  • stamp = 1: Selalu memberi stempel pada informasi build ke dalam biner, bahkan dalam build --nostamp. Setelan ini harus dihindari, karena berpotensi menghentikan proses cache jarak jauh untuk biner dan tindakan downstream apa pun yang bergantung padanya.
  • stamp = 0: Selalu mengganti informasi build dengan nilai konstanta. Ini memberikan cache hasil build yang baik.
  • stamp = -1: Penyematan informasi build dikontrol oleh flag --[no]stamp.

Biner yang diberi stempel tidak dibuat ulang kecuali jika dependensinya berubah.

win_def_file

Label; optional

File Windows DEF yang akan diteruskan ke linker.

Atribut ini hanya boleh digunakan jika Windows adalah platform target. Ini dapat digunakan untuk mengekspor simbol selama menautkan library 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 adalah kasus penggunaan umum:
1. Menautkan library statis

cc_import(
  name = "mylib",
  hdrs = ["mylib.h"],
  static_library = "libmylib.a",
  # If alwayslink is turned on,
  # libmylib.a will be forcely linked into any binary that depends on it.
  # alwayslink = 1,
)
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 library 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,
)

Argumen

Atribut
name

Name; required

Nama unik untuk target ini.

hdrs

List of labels; optional

Daftar file header yang dipublikasikan oleh library prakompilasi ini untuk disertakan secara langsung oleh sumber dalam aturan dependen.

Boolean; optional; default is False

Jika 1, biner apa pun yang bergantung (secara langsung atau tidak langsung) pada library yang telah dikompilasi C++ ini akan ditautkan di semua file objek yang diarsipkan di library statis, 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 terdaftar untuk menerima beberapa callback yang disediakan oleh beberapa layanan.

Jika alwayslink tidak berfungsi dengan VS 2017 pada Windows, hal ini karena masalah umum, harap upgrade VS 2017 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 dikompilasi sebelumnya. Bazel memastikannya tersedia untuk biner yang bergantung padanya selama waktu proses.

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

static_library

Label; optional

Satu library statis yang sudah dikompilasi sebelumnya.

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

system_provided

Boolean; optional; default is False

Jika 1, ini menunjukkan library bersama yang diperlukan saat runtime disediakan oleh sistem. Dalam hal ini, 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, include_prefix, includes, interface_deps, licenses, linkopts, linkstamp, linkstatic, local_defines, nocopts, restricted_to, strip_include_prefix, tags, target_compatible_with, testonly, textual_hdrs, toolchains, visibility, win_def_file)

Pemeriksaan penyertaan header

Semua file header yang digunakan dalam build harus dideklarasikan dalam hdrs atau srcs aturan cc_*. Hal ini diterapkan.

Untuk aturan cc_library, header dalam hdrs terdiri dari antarmuka publik library dan dapat langsung disertakan dari file dalam hdrs dan srcs dari library itu sendiri serta dari file dalam hdrs dan srcs dari aturan cc_* yang mencantumkan library dalam deps-nya. Header dalam srcs hanya boleh disertakan langsung dari file di hdrs dan srcs library itu sendiri. Saat memutuskan apakah akan menempatkan header ke dalam hdrs atau srcs, Anda harus bertanya apakah Anda ingin konsumen library ini dapat langsung menyertakannya. Ini adalah keputusan yang kurang lebih sama seperti visibilitas antara 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 dicantumkan 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 tidak baz.h.

Termasuk filePenyertaan yang diizinkan
foo.hBar.H
foo.ccfoo.h bar.h
Bar.Hbar-impl.h baz.h
bar-impl.hBar.h Baz.h
bar.ccbar.h bar-impl.h baz.h
Baz.hbaz-impl.h
baz-impl.hBaz.h
Baz.ccbas.h. bas-impl.h

Aturan pemeriksaan penyertaan hanya berlaku untuk penyertaan langsung. Pada contoh di atas, foo.cc diizinkan untuk menyertakan bar.h, yang mungkin menyertakan baz.h, yang kemudian diizinkan untuk menyertakan baz-impl.h. Secara teknis, kompilasi file .cc secara transitif dapat menyertakan file header apa pun di hdrs atau srcs di cc_library mana pun dalam 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 dapat diizinkan, baz harus ditambahkan ke deps foo.

Sayangnya, saat ini Bazel tidak dapat membedakan antara penyertaan langsung dan transitif, sehingga tidak dapat mendeteksi kasus error ketika file secara ilegal menyertakan header secara langsung yang hanya diizinkan untuk disertakan secara transitif. Misalnya, Bazel tidak akan mengeluh jika dalam contoh di atas foo.cc langsung menyertakan baz.h. Ini ilegal, karena foo tidak secara langsung bergantung pada baz. Saat ini, tidak ada error yang dihasilkan, tetapi pemeriksaan error tersebut dapat 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.

Ini dapat berupa target cc_library atau objc_library.

srcs

List of labels; optional

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

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

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

Semua file #include harus disebutkan dalam atribut srcs dari aturan ini, atau dalam atribut hdrs dari cc_library() yang direferensikan. Gaya yang direkomendasikan adalah untuk header yang terkait dengan library yang akan dicantumkan dalam atribut hdrs library, dan header lainnya yang terkait dengan sumber aturan ini untuk dicantumkan dalam srcs. Lihat "Pemeriksaan penyertaan header" untuk deskripsi yang lebih mendetail.

Jika nama aturan ada dalam srcs, aturan ini otomatis bergantung pada aturan tersebut. Jika outs aturan bernama adalah file sumber C atau C++, aturan tersebut akan dikompilasi ke dalam aturan ini; jika file tersebut adalah file library, file tersebut 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 praprosesor C: .S
  • Arsipkan: .a, .pic.a
  • "Selalu tautkan" perpustakaan: .lo, .pic.lo
  • Pustaka bersama, berversi atau tidak berversi: .so, .so.version
  • File objek: .o, .pic.o

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

hdrs

List of labels; optional

Daftar file header yang dipublikasikan oleh library ini untuk disertakan secara langsung oleh sumber dalam aturan dependen.

Ini adalah lokasi yang sangat disukai untuk mendeklarasikan file header yang menjelaskan antarmuka untuk library. Header ini akan disediakan untuk disertakan oleh sumber dalam aturan ini atau aturan dependen. Sebagai gantinya, header yang tidak dimaksudkan untuk disertakan oleh klien library ini harus dicantumkan dalam atribut srcs, meskipun disertakan oleh header yang dipublikasikan. Lihat "Pemeriksaan penyertaan header" untuk deskripsi selengkapnya.

Boolean; optional; default is False

Jika 1, biner apa pun yang bergantung (secara langsung atau tidak langsung) pada library C++ ini akan ditautkan dalam semua file objek untuk file yang tercantum dalam srcs, meskipun beberapa file 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 terdaftar untuk menerima beberapa callback yang disediakan oleh beberapa layanan.

Jika alwayslink tidak berfungsi dengan VS 2017 pada Windows, hal ini karena masalah umum, harap upgrade VS 2017 ke versi terbaru.

copts

List of strings; optional

Tambahkan opsi ini ke perintah kompilasi C++. Tunduk pada substitusi "Makevariable" dan tokenisasi shell Bourne.

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

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

defines

List of strings; optional

Daftar definisi yang akan ditambahkan ke baris kompilasi. Tunduk pada substitusi "Make" variabel dan tokenisasi shell Bourne. Setiap string, yang harus terdiri dari satu token shell Bourne, diawali dengan -D dan ditambahkan ke command line kompilasi ke target ini, serta ke setiap aturan yang bergantung padanya. Hati-hati, karena ini mungkin memiliki efek yang luas. Jika ragu, tambahkan nilai yang ditentukan ke local_defines.
include_prefix

String; optional

Awalan yang akan ditambahkan ke jalur header aturan ini.

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

Awalan pada atribut strip_include_prefix dihapus sebelum awalan ini ditambahkan.

includes

List of strings; optional

Daftar disc penyertaan 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 pada aturan tersebut. (Catatan: bukan aturan yang diperlukan!) Berhati-hatilah, karena ini mungkin memiliki efek yang luas. Jika ragu, tambahkan flag "-I" sebagai gantinya COPTS.

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

interface_deps

List of labels; optional

Jika --experimental_cc_interface_deps disetel ke Benar (True), target yang tercantum dalam dependensi akan berperilaku sebagai dependensi implementasi. Tidak seperti dependensi reguler, header dan dependensi menyertakan dependensi implementasi (dan semua dependensi transitifnya) hanya digunakan untuk kompilasi library ini, bukan library yang bergantung padanya. Library yang diandalkan karena dependensi implementasi masih ditautkan di target biner yang bergantung pada library ini. Dependensi yang tercantum dalam antarmuka_deps akan terus memiliki perilaku yang sama dengan dependensi lama tempat header dan jalur penyertaan disebarkan ke downstream.
linkopts

List of strings; optional

Tambahkan tanda ini ke perintah linker C++. Tunduk pada substitusi "Make" 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 dalam deps. Daftar file yang dihasilkan oleh target tersebut ditambahkan ke opsi linker. Error dilaporkan jika label tidak valid atau tidak dideklarasikan di deps.

linkstamp

Label; optional

Mengumpulkan dan menautkan file sumber C++ yang ditentukan secara bersamaan ke dalam biner akhir. Trik ini diperlukan untuk memasukkan informasi stempel waktu ke dalam biner. Jika kita mengompilasi file sumber ke file objek dengan cara biasa, stempel waktu akan salah. Kompilasi linktamp tidak boleh menyertakan kumpulan tanda compiler tertentu, sehingga tidak boleh bergantung pada header, opsi compiler, atau variabel build tertentu lainnya. Opsi ini hanya diperlukan dalam paket base.
linkstatic

Boolean; optional; default is False

Untuk cc_binary dan cc_test: tautkan biner dalam mode statis. Untuk cc_library.linkstatic: lihat di bawah.

Secara default, opsi ini diaktifkan untuk cc_binary dan dinonaktifkan untuk sisanya.

Jika diaktifkan dan ini adalah biner atau pengujian, opsi ini akan memberi tahu alat build untuk menautkan di .a, bukan .so untuk library pengguna, jika memungkinkan. Beberapa library sistem mungkin masih ditautkan secara dinamis, begitu juga dengan library yang tidak memiliki library statis. Jadi, file yang dapat dieksekusi yang dihasilkan akan tetap ditautkan secara dinamis, sehingga hanya sebagian besar statis.

Ada tiga cara untuk menautkan file executable:

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

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

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

local_defines

List of strings; optional

Daftar definisi yang akan ditambahkan ke baris kompilasi. Tunduk pada substitusi "Make" variabel dan tokenisasi shell Bourne. Setiap string, yang harus terdiri dari satu token shell Bourne, ditambahkan dengan -D dan ditambahkan ke command line kompilasi untuk target ini, tetapi tidak ke dependensinya.
nocopts

String; optional

Hapus opsi pencocokan dari perintah kompilasi C++. Sesuai dengan substitusi "Make" variabel. Nilai atribut ini diinterpretasikan sebagai ekspresi reguler. Setiap COPTS yang ada sebelumnya 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

String; optional

Awalan untuk menghapus jalur jalur header aturan ini.

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

Jika itu adalah jalur relatif, jalur tersebut akan diambil sebagai jalur relatif paket. Jika ini adalah absolut, maka akan dipahami sebagai jalur relatif repositori.

Awalan pada atribut include_prefix ditambahkan setelah awalan ini dihilangkan.

textual_hdrs

List of labels; optional

Daftar file header yang dipublikasikan oleh library ini akan disertakan secara tekstual oleh sumber dalam aturan dependen.

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 mem-build kode yang valid.

win_def_file

Label; optional

File Windows DEF yang akan diteruskan ke linker.

Atribut ini hanya boleh digunakan jika Windows adalah platform target. Ini dapat digunakan untuk mengekspor simbol selama menautkan library 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 aturan proto_library untuk menghasilkan kode C++.

petunjuk_pengambilan_anda

fdo_prefetch_hints(name, compatible_with, deprecation, distribs, features, licenses, profile, restricted_to, tags, target_compatible_with, testonly, visibility)

Mewakili profil petunjuk pengambilan data FDO yang ada di ruang kerja atau di jalur absolut yang ditentukan. Contoh:

fdo_prefetch_hints(
    name = "hints",
    profile = "//path/to/hints:profile.afdo",
)

fdo_profile(
  name = "hints_abs",
  absolute_path_profile = "/absolute/path/profile.afdo",
)

Argumen

Atribut
name

Name; required

Nama unik untuk target ini.

profile

Label; optional

Label profil petunjuk. File petunjuk memiliki ekstensi .afdo Label ini juga dapat mengarah ke aturan fdo_absolute_path_profile.

profil_fdo

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 mungkin hanya memiliki ekstensi .afdo.
profile

Label; optional

Label profil FDO. File FDO dapat memiliki salah satu ekstensi berikut: .profraw untuk profil LLVM yang tidak terindeks, .profdata untuk profil LLVM yang diindeks, .zip yang menyimpan profil profraw LLVM, .afdo untuk profil AutoFDO, .xfdo untuk profil XBinary. Label juga dapat mengarah ke aturan fdo_absolute_path_profile.
proto_profile

Label; optional

Label profil protobuf.

optimalkan_propeler

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 link. File ini memiliki ekstensi .txt.

cc_pengujian

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.

Ini dapat berupa target cc_library atau objc_library.

srcs

List of labels; optional

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

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

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

Semua file #include harus disebutkan dalam atribut srcs dari aturan ini, atau dalam atribut hdrs dari cc_library() yang direferensikan. Gaya yang direkomendasikan adalah untuk header yang terkait dengan library yang akan dicantumkan dalam atribut hdrs library, dan header lainnya yang terkait dengan sumber aturan ini untuk dicantumkan dalam srcs. Lihat "Pemeriksaan penyertaan header" untuk deskripsi yang lebih mendetail.

Jika nama aturan ada dalam srcs, aturan ini otomatis bergantung pada aturan tersebut. Jika outs aturan bernama adalah file sumber C atau C++, aturan tersebut akan dikompilasi ke dalam aturan ini; jika file tersebut adalah file library, file tersebut 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 praprosesor C: .S
  • Arsipkan: .a, .pic.a
  • "Selalu tautkan" perpustakaan: .lo, .pic.lo
  • Pustaka bersama, berversi atau tidak berversi: .so, .so.version
  • File objek: .o, .pic.o

...dan aturan apa pun yang menghasilkan 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 ke target biner.

copts

List of strings; optional

Tambahkan opsi ini ke perintah kompilasi C++. Tunduk pada substitusi "Makevariable" dan tokenisasi shell Bourne.

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

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

defines

List of strings; optional

Daftar definisi yang akan ditambahkan ke baris kompilasi. Tunduk pada substitusi "Make" variabel dan tokenisasi shell Bourne. Setiap string, yang harus terdiri dari satu token shell Bourne, diawali dengan -D dan ditambahkan ke command line kompilasi ke target ini, serta ke setiap aturan yang bergantung padanya. Hati-hati, karena ini mungkin memiliki efek yang luas. Jika ragu, tambahkan nilai yang ditentukan ke local_defines.
includes

List of strings; optional

Daftar disc penyertaan 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 pada aturan tersebut. (Catatan: bukan aturan yang diperlukan!) Berhati-hatilah, karena ini mungkin memiliki efek yang luas. Jika ragu, tambahkan flag "-I" sebagai gantinya COPTS.

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

linkopts

List of strings; optional

Tambahkan tanda ini ke perintah linker C++. Tunduk pada substitusi "Make" 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 dalam deps. Daftar file yang dihasilkan oleh target tersebut ditambahkan ke opsi linker. Error dilaporkan jika label tidak valid atau tidak dideklarasikan di deps.

linkstatic

Boolean; optional; default is False

Untuk cc_binary dan cc_test: tautkan biner dalam mode statis. Untuk cc_library.linkstatic: lihat di bawah.

Secara default, opsi ini diaktifkan untuk cc_binary dan dinonaktifkan untuk sisanya.

Jika diaktifkan dan ini adalah biner atau pengujian, opsi ini akan memberi tahu alat build untuk menautkan di .a, bukan .so untuk library pengguna, jika memungkinkan. Beberapa library sistem mungkin masih ditautkan secara dinamis, begitu juga dengan library yang tidak memiliki library statis. Jadi, file yang dapat dieksekusi yang dihasilkan akan tetap ditautkan secara dinamis, sehingga hanya sebagian besar statis.

Ada tiga cara untuk menautkan file executable:

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

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

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

local_defines

List of strings; optional

Daftar definisi yang akan ditambahkan ke baris kompilasi. Tunduk pada substitusi "Make" variabel dan tokenisasi shell Bourne. Setiap string, yang harus terdiri dari satu token shell Bourne, ditambahkan dengan -D dan ditambahkan ke command line kompilasi untuk target ini, tetapi tidak ke dependensinya.
malloc

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

Ganti dependensi default di malloc.

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

nocopts

String; optional

Hapus opsi pencocokan dari perintah kompilasi C++. Sesuai dengan substitusi "Make" variabel. Nilai atribut ini diinterpretasikan sebagai ekspresi reguler. Setiap COPTS yang ada sebelumnya 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

Integer; optional; default is 0

Apakah akan mengenkode informasi build ke dalam biner. Kemungkinan nilai:
  • stamp = 1: Selalu memberi stempel pada informasi build ke dalam biner, bahkan dalam build --nostamp. Setelan ini harus dihindari, karena berpotensi menghentikan proses cache jarak jauh untuk biner dan tindakan downstream apa pun yang bergantung padanya.
  • stamp = 0: Selalu mengganti informasi build dengan nilai konstanta. Ini memberikan cache hasil build yang baik.
  • stamp = -1: Penyematan informasi build dikontrol oleh flag --[no]stamp.

Biner yang diberi stempel tidak dibuat ulang kecuali jika dependensinya berubah.

win_def_file

Label; optional

File Windows DEF yang akan diteruskan ke linker.

Atribut ini hanya boleh digunakan jika Windows adalah platform target. Ini dapat digunakan untuk mengekspor simbol selama menautkan library 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)

Mewakili toolchain C++.

Aturan ini bertanggung jawab untuk:

  • Mengumpulkan semua artefak yang diperlukan untuk menjalankan tindakan C++. Hal ini dilakukan oleh atribut seperti all_files, compiler_files, linker_files, atau atribut lainnya yang diakhiri dengan _files). Ini adalah yang paling umum yang mengelompokkan semua file yang diperlukan.
  • Membuat command line yang benar untuk tindakan C++. Hal ini dilakukan menggunakan penyedia CcToolchainConfigInfo (detail di bawah).

Gunakan atribut toolchain_config untuk mengonfigurasi toolchain C++. Lihat juga halaman ini untuk mengetahui 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

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 (dengan pengecualian tindakan yang menggunakan kumpulan artefak yang lebih akurat dari atribut di bawah). Bazel berasumsi bahwa all_files adalah superset dari semua atribut lain yang menyediakan artefak (misalnya, kompilasi linktamp memerlukan file kompilasi dan link, sehingga memerlukan all_files).

Ini adalah isi cc_toolchain.files, dan ini digunakan oleh semua aturan Starlark menggunakan toolchain C++.

ar_files

Label; optional

Koleksi semua artefak cc_toolchain yang diperlukan untuk mengarsipkan tindakan.

as_files

Label; optional

Kumpulan semua artefak cc_toolchain yang diperlukan untuk tindakan perakitan.

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 pada #7075.

Jika ditetapkan, metode ini akan digunakan untuk melakukan pemilihan crosstool_config.toolchain. Ini akan lebih diprioritaskan daripada opsi --cpu Bazel.

compiler_files

Label; required

Kumpulan semua artefak cc_toolchain yang diperlukan untuk tindakan kompilasi.

Saat ini hanya digunakan oleh tindakan lto_backend, tindakan kompilasi reguler menggunakan all_files (#6927).

compiler_files_without_includes

Label; optional

Kumpulan semua artefak cc_toolchain yang diperlukan untuk tindakan kompilasi jika penemuan penemuan didukung (saat ini khusus Google).
coverage_files

Label; optional

Koleksi semua artefak cc_toolchain yang diperlukan untuk tindakan cakupan. Jika tidak ditentukan, maka all_files akan digunakan.
cpu

String; optional; nonconfigurable

Tidak digunakan lagi. Sebagai gantinya, gunakan atribut toolchain_identifier. Ini akan menjadi noop setelah CROSSTOOL migrasi ke Starlark , dan akan dihapus pada #7075.

Jika ditetapkan, metode ini akan digunakan untuk melakukan pemilihan crosstool_config.toolchain. Ini akan lebih diprioritaskan daripada opsi --cpu 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 libstdc++.so).

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

exec_transition_for_inputs

Boolean; optional; default is True

Setel ke Benar (True) untuk membuat semua input file ke cc_toolchain untuk platform exec, tanpa 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 tindakan penautan.
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, libstdc++.a).

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

strip_files

Label; required

Kumpulan semua artefak cc_toolchain yang diperlukan untuk tindakan strip.
supports_header_parsing

Boolean; optional; default is False

Tetapkan ke True jika cc_toolchain mendukung tindakan penguraian header.
supports_param_files

Boolean; optional; default is True

Tetapkan ke Benar saat cc_toolchain mendukung penggunaan file parameter untuk menautkan tindakan.
toolchain_config

Label; required

Label aturan yang menyediakan cc_toolchain_config_info.
toolchain_identifier

String; optional; nonconfigurable

ID yang digunakan untuk mencocokkan cc_toolchain ini dengan crosstool_config.toolchain yang sesuai.

Hingga masalah #5380 diperbaiki, ini adalah cara yang direkomendasikan untuk mengaitkan cc_toolchain dengan CROSSTOOL.toolchain. Objek ini akan diganti dengan atribut 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 yang diteruskan ke Bazel.

Lihat juga halaman ini untuk mengetahui konfigurasi toolchain C++ yang rumit dan dokumentasi pemilihan toolchain.

Argumen

Atribut
name

Name; required

Nama unik untuk target ini.

toolchains

Dictionary mapping strings to labels; required; nonconfigurable

Peta dari "<cpu>" atau "<cpu>|<compiler>" string ke label cc_toolchain. "<cpu>" akan digunakan saat hanya --cpu yang diteruskan ke Bazel, &"<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",
            },
          )