Aturan
- cc_binary
 - cc_import
 - cc_library
 - cc_shared_library
 - cc_static_library
 - cc_test
 - cc_toolchain
 - cc_toolchain_suite
 - fdo_prefetch_hints
 - fdo_profile
 - memprof_profile
 - propeller_optimize
 
cc_binary
Lihat sumber aturancc_binary(name, deps, srcs, data, additional_linker_inputs, args, compatible_with, conlyopts, copts, cxxopts, defines, deprecation, distribs, dynamic_deps, env, exec_compatible_with, exec_properties, features, hdrs_check, includes, licenses, link_extra_lib, linkopts, linkshared, linkstatic, local_defines, malloc, module_interfaces, nocopts, output_licenses, reexport_deps, restricted_to, stamp, tags, target_compatible_with, testonly, toolchains, visibility, win_def_file)
Tindakan ini akan menghasilkan biner yang dapat dieksekusi.
name target harus sama dengan nama
file sumber yang merupakan titik entri utama aplikasi (tanpa ekstensi).
Misalnya, jika titik entri Anda berada di main.cc, nama Anda harus main.
Target output implisit
name.stripped(hanya dibuat jika diminta secara eksplisit): Versi biner yang dihilangkan.strip -gdijalankan pada biner untuk menghapus simbol debug. Opsi penghapusan tambahan dapat diberikan di command line menggunakan--stripopt=-foo.name.dwp(hanya dibuat jika diminta secara eksplisit): Jika Fission diaktifkan: file paket informasi debug yang cocok untuk men-debug biner yang di-deploy dari jarak jauh. Lainnya: file kosong.
Argumen
| Atribut | |
|---|---|
name | 
        
           Nama; wajib Nama unik untuk target ini.  | 
      
          deps
         | 
        
                     Daftar label; defaultnya adalah  Target ini dapat berupa   | 
      
          srcs
         | 
        
                     Daftar label; defaultnya adalah  Semua file  File assembler murni (.s, .asm) tidak diproses sebelumnya dan biasanya dibangun menggunakan assembler. File assembly yang telah diproses awal (.S) diproses awal dan biasanya dibangun menggunakan compiler C/C++. File  Semua file  File  Jika atribut  
  Jenis file  
 
  ... dan aturan apa pun yang menghasilkan file tersebut (misalnya,   | 
      
          data
         | 
        
                     Daftar label; defaultnya adalah  data
di Atribut umum yang ditentukan oleh
sebagian besar aturan build.
Jika  Jika  Kode C++ Anda dapat mengakses file data ini seperti berikut:  | 
      
          additional_linker_inputs
         | 
        
                     Daftar label; defaultnya adalah  Misalnya, file .res Windows yang dikompilasi dapat diberikan di sini untuk disematkan dalam target biner.  | 
      
          conlyopts
         | 
        
                     Daftar string; defaultnya adalah   | 
      
          copts
         | 
        
                     Daftar string; defaultnya adalah  
  Setiap string dalam atribut ini ditambahkan dalam urutan tertentu ke  
  Jika paket mendeklarasikan feature
    | 
      
          cxxopts
         | 
        
                     Daftar string; defaultnya adalah   | 
      
          defines
         | 
        
                     Daftar string; defaultnya adalah  -D dan ditambahkan ke command line kompilasi ke target ini,
serta ke setiap aturan yang bergantung padanya. Berhati-hatilah, karena tindakan ini dapat berdampak luas.  Jika ragu, tambahkan nilai yang ditentukan ke
local_defines.
         | 
      
          dynamic_deps
         | 
        
                     Daftar label; defaultnya adalah  cc_shared_library lain yang bergantung pada target saat ini.
Implementasi   | 
      
          hdrs_check
         | 
        
                     String; default-nya adalah   | 
      
          includes
         | 
        
                     Daftar string; defaultnya adalah  -isystem path_to_package/include_entry.
Ini hanya boleh digunakan untuk library pihak ketiga yang
tidak sesuai dengan gaya penulisan pernyataan #include Google.
Tidak seperti COPTS, tanda ini ditambahkan untuk aturan ini dan setiap aturan yang bergantung padanya. (Catatan: bukan aturan yang bergantung padanya.) Berhati-hatilah, karena hal ini dapat berdampak luas.  Jika ragu, tambahkan tanda "-I" ke COPTS.
Jalur   | 
      
          link_extra_lib
         | 
        
                     Label; defaultnya adalah  
    Secara default, biner C++ ditautkan dengan   | 
      
          linkopts
         | 
        
                     Daftar string; defaultnya adalah  LINKOPTS sebelum
menautkan target biner.
    Setiap elemen dalam daftar ini yang tidak diawali dengan   | 
      
          linkshared
         | 
        
                     Boolean; defaultnya adalah  linkshared=True dalam aturan Anda. Secara default, opsi ini dinonaktifkan.
  Kehadiran tanda ini berarti penautan terjadi dengan tanda  
  Jika Anda menentukan   | 
      
          linkstatic
         | 
        
                     Boolean; defaultnya adalah  cc_binary dan
cc_test: tautkan biner dalam mode
statis. Untuk cc_library.link_static: lihat di bawah.
Secara default, opsi ini aktif untuk  
  Jika diaktifkan dan ini adalah biner atau pengujian, opsi ini akan memberi tahu alat build untuk menautkan
   Sebenarnya ada tiga cara berbeda untuk menautkan file yang dapat dieksekusi: 
 
Jika atribut  
Atribut  
Hanya ada sedikit kode yang dibuat dengan   | 
      
          local_defines
         | 
        
                     Daftar string; defaultnya adalah  -D dan ditambahkan ke command line kompilasi untuk target ini,
tetapi tidak untuk dependensinya.
         | 
      
          malloc
         | 
        
                     Label; defaultnya adalah  
  Secara default, biner C++ ditautkan ke   | 
      
          module_interfaces
         | 
        
                     Daftar label; defaultnya adalah  Standar C++ tidak memiliki batasan tentang ekstensi file antarmuka modul 
 Penggunaan dilindungi oleh flag
  | 
      
          nocopts
         | 
        
                     String; default-nya adalah  COPTS yang sudah ada dan cocok dengan ekspresi reguler ini
(termasuk nilai yang ditentukan secara eksplisit dalam atribut copts aturan)
akan dihapus dari COPTS untuk tujuan mengompilasi aturan ini.
Atribut ini tidak diperlukan atau digunakan
di luar third_party.  Nilai tidak diproses sebelumnya
dengan cara apa pun selain penggantian variabel "Make".
         | 
      
          reexport_deps
         | 
        
                     Daftar label; defaultnya adalah   | 
      
          stamp
         | 
        
                     Bilangan bulat; defaultnya adalah  
 Biner yang diberi stempel tidak dibangun ulang kecuali jika dependensinya berubah.  | 
      
          win_def_file
         | 
        
                     Label; defaultnya adalah  Atribut ini hanya boleh digunakan jika Windows adalah platform target. Opsi ini dapat digunakan untuk mengekspor simbol selama penautan library bersama.  | 
      
cc_import
Lihat sumber aturancc_import(name, deps, data, hdrs, alwayslink, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, features, includes, interface_library, linkopts, objects, pic_objects, pic_static_library, restricted_to, shared_library, static_library, strip_include_prefix, system_provided, tags, target_compatible_with, testonly, toolchains, visibility)
Aturan cc_import memungkinkan pengguna mengimpor library C/C++ yang telah dikompilasi sebelumnya.
Berikut adalah kasus penggunaan umum: 
1. Menautkan library statis
cc_import(
  name = "mylib",
  hdrs = ["mylib.h"],
  static_library = "libmylib.a",
  # If alwayslink is turned on,
  # libmylib.a will be forcely linked into any binary that depends on it.
  # alwayslink = 1,
)
cc_import(
  name = "mylib",
  hdrs = ["mylib.h"],
  shared_library = "libmylib.so",
)
Di Unix:
cc_import(
  name = "mylib",
  hdrs = ["mylib.h"],
  # libmylib.ifso is an interface library for libmylib.so which will be passed to linker
  interface_library = "libmylib.ifso",
  # libmylib.so will be available for runtime
  shared_library = "libmylib.so",
)
Di Windows:
cc_import(
  name = "mylib",
  hdrs = ["mylib.h"],
  # mylib.lib is an import library for mylib.dll which will be passed to linker
  interface_library = "mylib.lib",
  # mylib.dll will be available for runtime
  shared_library = "mylib.dll",
)
system_provided=True
Di Unix:
cc_import(
  name = "mylib",
  hdrs = ["mylib.h"],
  interface_library = "libmylib.ifso", # Or we can also use libmylib.so as its own interface library
  # libmylib.so is provided by system environment, for example it can be found in LD_LIBRARY_PATH.
  # This indicates that Bazel is not responsible for making libmylib.so available.
  system_provided = 1,
)
Di Windows:
cc_import(
  name = "mylib",
  hdrs = ["mylib.h"],
  # mylib.lib is an import library for mylib.dll which will be passed to linker
  interface_library = "mylib.lib",
  # mylib.dll is provided by system environment, for example it can be found in PATH.
  # This indicates that Bazel is not responsible for making mylib.dll available.
  system_provided = 1,
)
Di Unix:
cc_import(
  name = "mylib",
  hdrs = ["mylib.h"],
  static_library = "libmylib.a",
  shared_library = "libmylib.so",
)
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",
)
Sisanya sama di Unix dan Windows:
# first will link to libmylib.a (or libmylib.lib)
cc_binary(
  name = "first",
  srcs = ["first.cc"],
  deps = [":mylib"],
  linkstatic = 1, # default value
)
# second will link to libmylib.so (or libmylib.lib)
cc_binary(
  name = "second",
  srcs = ["second.cc"],
  deps = [":mylib"],
  linkstatic = 0,
)
cc_import mendukung atribut include. Contoh:
cc_import(
  name = "curl_lib",
  hdrs = glob(["vendor/curl/include/curl/*.h"]),
  includes = ["vendor/curl/include"],
  shared_library = "vendor/curl/lib/.libs/libcurl.dylib",
)
Argumen
| Atribut | |
|---|---|
name | 
        
           Nama; wajib Nama unik untuk target ini.  | 
      
          deps
         | 
        
                     Daftar label; defaultnya adalah  deps
di Atribut umum yang ditentukan oleh
sebagian besar aturan build.
         | 
      
          hdrs
         | 
        
                     Daftar label; defaultnya adalah   | 
      
          alwayslink
         | 
        
                     Boolean; defaultnya adalah  Jika alwayslink tidak berfungsi dengan VS 2017 di Windows, hal itu disebabkan oleh masalah yang diketahui, upgrade VS 2017 Anda ke versi terbaru.  | 
      
          includes
         | 
        
                     Daftar string; defaultnya adalah  -isystem path_to_package/include_entry.
Ini hanya boleh digunakan untuk library pihak ketiga yang
tidak sesuai dengan gaya penulisan pernyataan #include Google.
Tidak seperti COPTS, tanda ini ditambahkan untuk aturan ini dan setiap aturan yang bergantung padanya. (Catatan: bukan aturan yang bergantung padanya.) Berhati-hatilah, karena hal ini dapat berdampak luas.  Jika ragu, tambahkan tanda "-I" ke COPTS.
Jalur   | 
      
          interface_library
         | 
        
                     Label; defaultnya adalah   Jenis file yang diizinkan:
    | 
      
          linkopts
         | 
        
                     Daftar string; defaultnya adalah  LINKOPTS sebelum
menautkan target biner.
  Setiap elemen dalam daftar ini yang tidak diawali dengan   | 
      
          objects
         | 
        
                     Daftar label; defaultnya adalah   | 
      
          pic_objects
         | 
        
                     Daftar label; defaultnya adalah   | 
      
          pic_static_library
         | 
        
                     Label; defaultnya adalah   | 
      
          shared_library
         | 
        
                     Label; defaultnya adalah   Jenis file yang diizinkan:
    | 
      
          static_library
         | 
        
                     Label; defaultnya adalah   Jenis file yang diizinkan:
    | 
      
          strip_include_prefix
         | 
        
                     String; default-nya adalah  Jika ditetapkan, header dalam atribut  Jika jalur relatif, jalur tersebut dianggap sebagai jalur relatif paket. Jika berupa jalur absolut, jalur tersebut dipahami sebagai jalur relatif repositori. Awalan dalam atribut  Atribut ini hanya sah berdasarkan   | 
      
          system_provided
         | 
        
                     Boolean; defaultnya adalah  interface_library harus ditentukan dan shared_library harus kosong.
         | 
      
cc_library
Lihat sumber aturancc_library(name, deps, srcs, data, hdrs, additional_compiler_inputs, additional_linker_inputs, alwayslink, compatible_with, conlyopts, copts, cxxopts, defines, deprecation, distribs, exec_compatible_with, exec_properties, features, hdrs_check, implementation_deps, include_prefix, includes, licenses, linkopts, linkstamp, linkstatic, local_defines, module_interfaces, restricted_to, strip_include_prefix, tags, target_compatible_with, testonly, textual_hdrs, toolchains, visibility, win_def_file)
Gunakan cc_library() untuk library yang dikompilasi C++.
  Hasilnya adalah .so, .lo,
  atau .a, bergantung pada apa yang diperlukan.
  Jika Anda membuat sesuatu dengan penautan statis yang bergantung pada
  cc_library, output aturan library yang bergantung
  adalah file .a. Jika Anda menentukan
   alwayslink=True, Anda akan mendapatkan file .lo.
  Nama file output sebenarnya adalah libfoo.so untuk
  library bersama, dengan foo adalah nama aturan.    Jenis library lainnya diakhiri dengan .lo dan .a,
  masing-masing.  Jika Anda memerlukan nama library bersama tertentu, misalnya, untuk menentukan modul Python, gunakan genrule untuk menyalin library ke nama yang diinginkan.
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 di hdrs terdiri dari
  antarmuka publik library dan dapat disertakan secara langsung dari
  file di hdrs dan srcs library itu sendiri serta dari file di hdrs dan srcs
  aturan cc_* yang mencantumkan library dalam deps-nya.
  Header di srcs hanya boleh disertakan langsung dari file
  di hdrs dan srcs library itu sendiri. Saat
  memutuskan apakah akan memasukkan header ke hdrs atau srcs,
  Anda harus bertanya apakah Anda ingin konsumen library ini dapat
  menyertakannya secara langsung. Keputusan ini hampir sama dengan
  antara visibilitas public dan private dalam bahasa pemrograman.
  Aturan cc_binary dan cc_test tidak memiliki antarmuka yang diekspor, sehingga juga tidak memiliki atribut hdrs. Semua header
  yang termasuk dalam biner atau pengujian secara langsung harus dicantumkan di
  srcs.
Untuk mengilustrasikan aturan ini, lihat contoh berikut.
cc_binary(
    name = "foo",
    srcs = [
        "foo.cc",
        "foo.h",
    ],
    deps = [":bar"],
)
cc_library(
    name = "bar",
    srcs = [
        "bar.cc",
        "bar-impl.h",
    ],
    hdrs = ["bar.h"],
    deps = [":baz"],
)
cc_library(
    name = "baz",
    srcs = [
        "baz.cc",
        "baz-impl.h",
    ],
    hdrs = ["baz.h"],
)
  Penyertaan langsung yang diizinkan dalam contoh ini tercantum dalam tabel di bawah.
  Misalnya, foo.cc diizinkan untuk menyertakan foo.h dan bar.h secara langsung, tetapi tidak baz.h.
| Menyertakan file | Pencantuman yang diizinkan | 
|---|---|
| foo.h | bar.h | 
| foo.cc | foo.h bar.h | 
| bar.h | bar-impl.h baz.h | 
| bar-impl.h | bar.h baz.h | 
| bar.cc | bar.h bar-impl.h baz.h | 
| baz.h | baz-impl.h | 
| baz-impl.h | baz.h | 
| baz.cc | baz.h baz-impl.h | 
  Aturan pemeriksaan penyertaan hanya berlaku untuk penyertaan langsung. Dalam contoh di atas, foo.cc diizinkan untuk
  menyertakan bar.h, yang dapat menyertakan baz.h, yang pada
  gilirannya diizinkan untuk menyertakan baz-impl.h. Secara teknis, kompilasi file .cc dapat secara transitif menyertakan file header apa pun di hdrs atau srcs dalam cc_library apa pun dalam penutupan transitif deps. Dalam
  kasus ini, compiler dapat membaca baz.h dan baz-impl.h
  saat mengompilasi foo.cc, tetapi foo.cc tidak boleh
  berisi #include "baz.h". Agar hal itu diizinkan, baz harus ditambahkan ke deps dari foo.
  Bazel bergantung pada dukungan toolchain untuk menerapkan aturan pemeriksaan penyertaan.
  Fitur layering_check harus didukung oleh toolchain
  dan diminta secara eksplisit, misalnya melalui
  flag command line --features=layering_check atau
  parameter features dari
  fungsi package. Toolchain
  yang disediakan oleh Bazel hanya mendukung fitur ini dengan clang di Unix dan macOS.
Contoh
   Kita menggunakan tanda alwayslink untuk memaksa linker menautkan kode ini meskipun kode biner utama tidak mereferensikannya.
cc_library(
    name = "ast_inspector_lib",
    srcs = ["ast_inspector_lib.cc"],
    hdrs = ["ast_inspector_lib.h"],
    visibility = ["//visibility:public"],
    deps = ["//third_party/llvm/llvm/tools/clang:frontend"],
    # alwayslink as we want to be able to call things in this library at
    # debug time, even if they aren't used anywhere in the code.
    alwayslink = 1,
)
Contoh berikut berasal dari
   third_party/python2_4_3/BUILD.
   Beberapa kode menggunakan library dl (untuk memuat
   library dinamis lain), jadi
   aturan ini menentukan opsi link -ldl untuk menautkan
   library dl.
cc_library(
    name = "python2_4_3",
    linkopts = [
        "-ldl",
        "-lutil",
    ],
    deps = ["//third_party/expat"],
)
Contoh berikut berasal dari third_party/kde/BUILD.
   Kami menyimpan file .so yang telah dibuat sebelumnya di depot.
   File header berada di subdirektori bernama include.
cc_library(
    name = "kde",
    srcs = [
        "lib/libDCOP.so",
        "lib/libkdesu.so",
        "lib/libkhtml.so",
        "lib/libkparts.so",
        ...more .so files...,
    ],
    includes = ["include"],
    deps = ["//third_party/X11"],
)
Contoh berikut berasal dari third_party/gles/BUILD.
   Kode pihak ketiga sering kali memerlukan beberapa defines dan
   linkopts.
cc_library(
    name = "gles",
    srcs = [
        "GLES/egl.h",
        "GLES/gl.h",
        "ddx.c",
        "egl.c",
    ],
    defines = [
        "USE_FLOAT",
        "__GL_FLOAT",
        "__GL_COMMON",
    ],
    linkopts = ["-ldl"],  # uses dlopen(), dl library
    deps = [
        "es",
        "//third_party/X11",
    ],
)
Argumen
| Atribut | |
|---|---|
name | 
        
           Nama; wajib Nama unik untuk target ini.  | 
      
          deps
         | 
        
                     Daftar label; defaultnya adalah  Target ini dapat berupa  Lihat komentar umum tentang  Ini harus berupa nama aturan pustaka C++.
   Saat Anda membuat biner yang menautkan library aturan ini,
   Anda juga akan menautkan library di  Meskipun namanya "deps", tidak semua klien library ini
   termasuk di sini.  Dependensi data waktu proses berada di  Untuk menautkan library pihak ketiga yang telah dikompilasi sebelumnya, tambahkan namanya ke
    Untuk membuat dependensi pada sesuatu tanpa menautkannya ke library ini, tambahkan
   namanya ke   | 
      
          srcs
         | 
        
                     Daftar label; defaultnya adalah  Semua file  File assembler murni (.s, .asm) tidak diproses sebelumnya dan biasanya dibangun menggunakan assembler. File assembly yang telah diproses awal (.S) diproses awal dan biasanya dibangun menggunakan compiler C/C++. File  Semua file  File  Jika atribut  
  Jenis file  
 
  ... dan aturan apa pun yang menghasilkan file tersebut (misalnya,   | 
      
          data
         | 
        
                     Daftar label; defaultnya adalah  data
di Atribut umum yang ditentukan oleh
sebagian besar aturan build.
Jika  Jika  Kode C++ Anda dapat mengakses file data ini seperti berikut:  | 
      
          hdrs
         | 
        
                     Daftar label; defaultnya adalah  Ini adalah lokasi yang sangat disarankan untuk mendeklarasikan file header yang
 menjelaskan antarmuka untuk library. Header ini akan tersedia untuk disertakan oleh sumber dalam aturan ini atau dalam aturan dependen.
 Header yang tidak dimaksudkan untuk disertakan oleh klien library ini harus
 dicantumkan dalam atribut  Jenis file   | 
      
          additional_compiler_inputs
         | 
        
                     Daftar label; defaultnya adalah   | 
      
          additional_linker_inputs
         | 
        
                     Daftar label; defaultnya adalah  Misalnya, file .res Windows yang dikompilasi dapat diberikan di sini untuk disematkan dalam target biner.  | 
      
          alwayslink
         | 
        
                     Boolean; defaultnya adalah  srcs, meskipun beberapa di antaranya tidak berisi simbol yang dirujuk oleh biner.
Hal ini berguna jika kode Anda tidak dipanggil secara eksplisit oleh kode dalam biner, misalnya, jika kode Anda mendaftar untuk menerima beberapa callback yang disediakan oleh beberapa layanan.
Jika alwayslink tidak berfungsi dengan VS 2017 di Windows, hal itu disebabkan oleh masalah yang diketahui, upgrade VS 2017 Anda ke versi terbaru.  | 
      
          conlyopts
         | 
        
                     Daftar string; defaultnya adalah   | 
      
          copts
         | 
        
                     Daftar string; defaultnya adalah  
  Setiap string dalam atribut ini ditambahkan dalam urutan tertentu ke  
  Jika paket mendeklarasikan feature
    | 
      
          cxxopts
         | 
        
                     Daftar string; defaultnya adalah   | 
      
          defines
         | 
        
                     Daftar string; defaultnya adalah  -D dan ditambahkan ke command line kompilasi ke target ini,
serta ke setiap aturan yang bergantung padanya. Berhati-hatilah, karena tindakan ini dapat berdampak luas.  Jika ragu, tambahkan nilai yang ditentukan ke
local_defines.
         | 
      
          hdrs_check
         | 
        
                     String; default-nya adalah   | 
      
          implementation_deps
         | 
        
                     Daftar label; defaultnya adalah  deps, header dan jalur include library ini (dan semua
dependensi transitifnya) hanya digunakan untuk kompilasi library ini, dan bukan library yang
bergantung padanya. Library yang ditentukan dengan implementation_deps masih ditautkan dalam
target biner yang bergantung pada library ini.
         | 
      
          include_prefix
         | 
        
                     String; default-nya adalah  Jika disetel, header dalam atribut  Awalan dalam atribut  Atribut ini hanya sah berdasarkan   | 
      
          includes
         | 
        
                     Daftar string; defaultnya adalah  -isystem path_to_package/include_entry.
Ini hanya boleh digunakan untuk library pihak ketiga yang
tidak sesuai dengan gaya penulisan pernyataan #include Google.
Tidak seperti COPTS, tanda ini ditambahkan untuk aturan ini dan setiap aturan yang bergantung padanya. (Catatan: bukan aturan yang bergantung padanya.) Berhati-hatilah, karena hal ini dapat berdampak luas.  Jika ragu, tambahkan tanda "-I" ke COPTS.
Jalur   | 
      
          linkopts
         | 
        
                     Daftar string; defaultnya adalah  cc_binary.linkopts.
Atribut linkopts juga diterapkan ke target apa pun yang bergantung, secara langsung atau tidak langsung, pada library ini melalui atribut deps (atau melalui atribut lain yang diperlakukan serupa: atribut malloc dari cc_binary). Opsi link dependensi lebih diprioritaskan daripada opsi link dependen (yaitu, opsi link dependensi muncul lebih dulu di command line). Linkopts yang ditentukan dalam
--linkopt
lebih diutamakan daripada linkopts aturan.
Perhatikan bahwa atribut  Selain itu, penting untuk diperhatikan bahwa opsi "-Wl,-soname" atau "-Xlinker -soname" tidak didukung dan tidak boleh ditentukan dalam atribut ini.  File   | 
      
          linkstamp
         | 
        
                     Label; defaultnya adalah  base.
         | 
      
          linkstatic
         | 
        
                     Boolean; defaultnya adalah  cc_binary dan
cc_test: tautkan biner dalam mode
statis. Untuk cc_library.link_static: lihat di bawah.
Secara default, opsi ini aktif untuk  
  Jika diaktifkan dan ini adalah biner atau pengujian, opsi ini akan memberi tahu alat build untuk menautkan
   Sebenarnya ada tiga cara berbeda untuk menautkan file yang dapat dieksekusi: 
 
Jika atribut  
Atribut  
Hanya ada sedikit kode yang dibuat dengan   | 
      
          local_defines
         | 
        
                     Daftar string; defaultnya adalah  -D dan ditambahkan ke command line kompilasi untuk target ini,
tetapi tidak untuk dependensinya.
         | 
      
          module_interfaces
         | 
        
                     Daftar label; defaultnya adalah  Standar C++ tidak memiliki batasan tentang ekstensi file antarmuka modul 
 Penggunaan dilindungi oleh flag
  | 
      
          strip_include_prefix
         | 
        
                     String; default-nya adalah  Jika ditetapkan, header dalam atribut  Jika jalur relatif, jalur tersebut dianggap sebagai jalur relatif paket. Jika berupa jalur absolut, jalur tersebut dipahami sebagai jalur relatif repositori. Awalan dalam atribut  Atribut ini hanya sah berdasarkan   | 
      
          textual_hdrs
         | 
        
                     Daftar label; defaultnya adalah  Ini adalah lokasi untuk mendeklarasikan file header yang tidak dapat dikompilasi sendiri; artinya, file tersebut harus selalu disertakan secara tekstual oleh file sumber lain untuk membangun kode yang valid.  | 
      
          win_def_file
         | 
        
                     Label; defaultnya adalah  Atribut ini hanya boleh digunakan jika Windows adalah platform target. Opsi ini dapat digunakan untuk mengekspor simbol selama penautan library bersama.  | 
      
cc_shared_library
Lihat sumber aturancc_shared_library(name, deps, additional_linker_inputs, compatible_with, deprecation, distribs, dynamic_deps, exec_compatible_with, exec_properties, experimental_disable_topo_sort_do_not_use_remove_before_7_0, exports_filter, features, restricted_to, roots, shared_lib_name, static_deps, tags, target_compatible_with, testonly, toolchains, user_link_flags, visibility, win_def_file)
Tindakan ini menghasilkan library bersama.
Contoh
cc_shared_library(
    name = "foo_shared",
    deps = [
        ":foo",
    ],
    dynamic_deps = [
        ":bar_shared",
    ],
    additional_linker_inputs = [
        ":foo.lds",
    ],
    user_link_flags = [
        "-Wl,--version-script=$(location :foo.lds)",
    ],
)
cc_library(
    name = "foo",
    srcs = ["foo.cc"],
    hdrs = ["foo.h"],
    deps = [
        ":bar",
        ":baz",
    ],
)
cc_shared_library(
    name = "bar_shared",
    shared_lib_name = "bar.so",
    deps = [":bar"],
)
cc_library(
    name = "bar",
    srcs = ["bar.cc"],
    hdrs = ["bar.h"],
)
cc_library(
    name = "baz",
    srcs = ["baz.cc"],
    hdrs = ["baz.h"],
)
Dalam contoh, foo_shared menautkan foo
dan baz secara statis, dengan baz sebagai dependensi transitif. bar tidak ditautkan karena sudah disediakan secara dinamis oleh
dynamic_dep bar_shared.
foo_shared menggunakan file *.lds skrip linker untuk mengontrol simbol mana yang harus diekspor. Logika aturan cc_shared_library tidak mengontrol simbol mana yang diekspor, tetapi hanya menggunakan apa yang diasumsikan diekspor untuk memberikan error selama fase analisis jika dua pustaka bersama mengekspor target yang sama.
Setiap dependensi langsung cc_shared_library diasumsikan diekspor. Oleh karena itu, Bazel mengasumsikan selama analisis bahwa foo diekspor oleh foo_shared. baz tidak diasumsikan diekspor
oleh foo_shared. Setiap target yang cocok dengan exports_filter
juga diasumsikan diekspor.
Setiap cc_library dalam contoh harus muncul paling banyak di satu
cc_shared_library. Jika ingin menautkan baz juga ke
bar_shared, kita perlu menambahkan
tags = ["LINKABLE_MORE_THAN_ONCE"] ke baz.
Karena atribut shared_lib_name, file yang dihasilkan oleh
bar_shared akan memiliki nama bar.so, bukan
nama libbar.so yang akan dimilikinya secara default di Linux.
Error
Two shared libraries in dependencies export the same symbols.
Hal ini akan terjadi setiap kali Anda membuat target dengan dua dependensi
cc_shared_library berbeda yang mengekspor target yang sama. Untuk memperbaikinya, Anda harus menghentikan library agar tidak diekspor di salah satu dependensi cc_shared_library.
Two shared libraries in dependencies link the same library statically
Hal ini akan terjadi setiap kali Anda membuat cc_shared_library baru dengan dua dependensi cc_shared_library berbeda yang menautkan target yang sama secara statis.
Mirip dengan error pada ekspor.
Salah satu cara untuk memperbaikinya adalah dengan berhenti menautkan library ke salah satu dependensi
cc_shared_library. Pada saat yang sama, yang masih menautkannya
harus mengekspor library agar yang tidak menautkannya tetap dapat melihat
simbol. Cara lainnya adalah dengan menarik library ketiga yang mengekspor target.
Cara ketiga adalah menandai pelaku cc_library dengan LINKABLE_MORE_THAN_ONCE
tetapi perbaikan ini jarang diperlukan dan Anda harus memastikan bahwa
cc_library memang aman untuk ditautkan lebih dari sekali.
'//foo:foo' is already linked statically in '//bar:bar' but not exported`
Artinya, library dalam penutupan transitif deps Anda dapat dijangkau
tanpa melalui salah satu dependensi cc_shared_library, tetapi sudah
ditautkan ke cc_shared_library lain di dynamic_deps dan tidak
diekspor.
Solusinya adalah mengekspornya dari dependensi cc_shared_library atau menarik
cc_shared_library ketiga yang mengekspornya.
Do not place libraries which only contain a precompiled dynamic library in deps.
Jika Anda memiliki library dinamis yang telah dikompilasi sebelumnya, library ini tidak perlu dan tidak dapat ditautkan secara statis ke target cc_shared_library saat ini yang sedang Anda buat. Oleh karena itu, nilai ini tidak termasuk dalam deps dari
cc_shared_library. Jika library dinamis yang telah dikompilasi sebelumnya ini adalah dependensi salah satu cc_libraries Anda, maka cc_library harus bergantung langsung padanya.
Trying to export a library already exported by a different shared library
Anda akan melihat error ini jika pada aturan saat ini Anda mengklaim akan mengekspor target yang sudah diekspor oleh salah satu dependensi dinamis Anda.
Untuk memperbaikinya, hapus target dari deps dan hanya mengandalkannya dari dependensi
dinamis atau pastikan exports_filter tidak menangkap target ini.
Argumen
| Atribut | |
|---|---|
name | 
        
           Nama; wajib Nama unik untuk target ini.  | 
      
          deps
         | 
        
                     Daftar label; defaultnya adalah  
Semua dependensi library transitif dari dependensi langsung ini akan ditautkan ke library bersama ini selama belum ditautkan oleh  
Selama analisis, penerapan aturan akan mempertimbangkan setiap target yang tercantum dalam
 
Implementasi ini juga akan memicu error setiap kali library yang sama ditautkan secara statis ke lebih dari satu   | 
      
          additional_linker_inputs
         | 
        
                     Daftar label; defaultnya adalah  user_link_flags.
         | 
      
          dynamic_deps
         | 
        
                     Daftar label; defaultnya adalah  cc_shared_library lain yang bergantung pada target saat ini.
Implementasi   | 
      
          experimental_disable_topo_sort_do_not_use_remove_before_7_0
         | 
        
                     Boolean; defaultnya adalah   | 
      
          exports_filter
         | 
        
                     Daftar string; defaultnya adalah  
Semua target  
Perhatikan bahwa atribut ini sebenarnya tidak menambahkan tepi dependensi ke target tersebut, tepi dependensi harus dibuat oleh  Sintaksis berikut diizinkan: 
 
  | 
      
          roots
         | 
        
                     Daftar label; defaultnya adalah   | 
      
          shared_lib_name
         | 
        
                     String; default-nya adalah   | 
      
          static_deps
         | 
        
                     Daftar string; defaultnya adalah   | 
      
          user_link_flags
         | 
        
                     Daftar string; defaultnya adalah   | 
      
          win_def_file
         | 
        
                     Label; defaultnya adalah  Atribut ini hanya boleh digunakan jika Windows adalah platform target. Opsi ini dapat digunakan untuk mengekspor simbol selama penautan library bersama.  | 
      
cc_static_library
Lihat sumber aturancc_static_library(name, deps, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, features, restricted_to, tags, target_compatible_with, testonly, toolchains, visibility)
--experimental_cc_static_library.
Menghasilkan library statis dari daftar target dan dependensi transitifnya.
Library statis yang dihasilkan berisi file objek target yang tercantum dalam
deps serta dependensi transitifnya, dengan preferensi diberikan kepada
objek PIC.
Grup output
linkdeps
File teks yang berisi label dependensi transitif target yang tercantum dalam
deps yang tidak memberikan file objek apa pun ke library statis, tetapi
menyediakan setidaknya satu library statis, dinamis, atau antarmuka. Library statis yang dihasilkan mungkin memerlukan ketersediaan library ini pada waktu penautan.
linkopts
File teks yang berisi linkopts yang disediakan pengguna dari semua dependensi transitif target yang tercantum dalam deps.
Simbol duplikat
Secara default, aturan cc_static_library memeriksa apakah library statis yang dihasilkan tidak berisi simbol duplikat. Jika ya, build akan gagal dengan pesan error yang mencantumkan simbol duplikat dan file objek yang memuatnya.
Pemeriksaan ini dapat dinonaktifkan per target atau per paket dengan menetapkan
features = ["-symbol_check"] atau secara global melalui
--features=-symbol_check.
Dukungan toolchain untuk symbol_check
Toolchain C++ yang dikonfigurasi otomatis dan disertakan dengan Bazel mendukung fitur
symbol_check di semua platform. Toolchain kustom dapat menambahkan dukungan untuknya dengan salah satu dari dua cara:
- Menerapkan tindakan 
ACTION_NAMES.validate_static_librarydan mengaktifkannya dengan fitursymbol_check. Set alat dalam tindakan dipanggil dengan dua argumen, yaitu library statis untuk memeriksa simbol duplikat dan jalur file yang harus dibuat jika pemeriksaan berhasil. - Fitur 
symbol_checkmenambahkan tanda pengarsip yang menyebabkan tindakan yang membuat library statis gagal pada simbol duplikat. 
Argumen
| Atribut | |
|---|---|
name | 
        
           Nama; wajib Nama unik untuk target ini.  | 
      
          deps
         | 
        
                     Daftar label; defaultnya adalah  Dependensi yang tidak menyediakan file objek apa pun tidak disertakan dalam library statis, tetapi labelnya dikumpulkan dalam file yang disediakan oleh grup output   | 
      
cc_test
Lihat sumber aturancc_test(name, deps, srcs, data, additional_linker_inputs, args, compatible_with, conlyopts, copts, cxxopts, defines, deprecation, distribs, dynamic_deps, env, env_inherit, exec_compatible_with, exec_properties, features, flaky, hdrs_check, includes, licenses, link_extra_lib, linkopts, linkshared, linkstatic, local, local_defines, malloc, module_interfaces, nocopts, reexport_deps, restricted_to, shard_count, size, stamp, tags, target_compatible_with, testonly, timeout, toolchains, visibility, win_def_file)
Aturan cc_test() mengompilasi pengujian.  Di sini, pengujian
adalah wrapper biner di sekitar beberapa kode pengujian.
Secara default, pengujian C++ ditautkan secara dinamis.
    Untuk menautkan pengujian unit secara statis, tentukan
    linkstatic=True.
    Sebaiknya beri komentar tentang alasan pengujian Anda memerlukan
    linkstatic; hal ini mungkin tidak jelas.
Target output implisit
name.stripped(hanya dibuat jika diminta secara eksplisit): Versi biner yang dihilangkan.strip -gdijalankan pada biner untuk menghapus simbol debug. Opsi penghapusan tambahan dapat diberikan di command line menggunakan--stripopt=-foo.name.dwp(hanya dibuat jika diminta secara eksplisit): Jika Fission diaktifkan: file paket informasi debug yang cocok untuk men-debug biner yang di-deploy dari jarak jauh. Lainnya: file kosong.
Lihat argumen cc_binary(), kecuali
argumen stamp ditetapkan ke 0 secara default untuk pengujian dan
cc_test memiliki atribut 
tambahan yang umum untuk semua aturan pengujian (*_test).
Argumen
| Atribut | |
|---|---|
name | 
        
           Nama; wajib Nama unik untuk target ini.  | 
      
          deps
         | 
        
                     Daftar label; defaultnya adalah  Target ini dapat berupa   | 
      
          srcs
         | 
        
                     Daftar label; defaultnya adalah  Semua file  File assembler murni (.s, .asm) tidak diproses sebelumnya dan biasanya dibangun menggunakan assembler. File assembly yang telah diproses awal (.S) diproses awal dan biasanya dibangun menggunakan compiler C/C++. File  Semua file  File  Jika atribut  
  Jenis file  
 
  ... dan aturan apa pun yang menghasilkan file tersebut (misalnya,   | 
      
          data
         | 
        
                     Daftar label; defaultnya adalah  data
di Atribut umum yang ditentukan oleh
sebagian besar aturan build.
Jika  Jika  Kode C++ Anda dapat mengakses file data ini seperti berikut:  | 
      
          additional_linker_inputs
         | 
        
                     Daftar label; defaultnya adalah  Misalnya, file .res Windows yang dikompilasi dapat diberikan di sini untuk disematkan dalam target biner.  | 
      
          conlyopts
         | 
        
                     Daftar string; defaultnya adalah   | 
      
          copts
         | 
        
                     Daftar string; defaultnya adalah  
  Setiap string dalam atribut ini ditambahkan dalam urutan tertentu ke  
  Jika paket mendeklarasikan feature
    | 
      
          cxxopts
         | 
        
                     Daftar string; defaultnya adalah   | 
      
          defines
         | 
        
                     Daftar string; defaultnya adalah  -D dan ditambahkan ke command line kompilasi ke target ini,
serta ke setiap aturan yang bergantung padanya. Berhati-hatilah, karena tindakan ini dapat berdampak luas.  Jika ragu, tambahkan nilai yang ditentukan ke
local_defines.
         | 
      
          dynamic_deps
         | 
        
                     Daftar label; defaultnya adalah  cc_shared_library lain yang bergantung pada target saat ini.
Implementasi   | 
      
          hdrs_check
         | 
        
                     String; default-nya adalah   | 
      
          includes
         | 
        
                     Daftar string; defaultnya adalah  -isystem path_to_package/include_entry.
Ini hanya boleh digunakan untuk library pihak ketiga yang
tidak sesuai dengan gaya penulisan pernyataan #include Google.
Tidak seperti COPTS, tanda ini ditambahkan untuk aturan ini dan setiap aturan yang bergantung padanya. (Catatan: bukan aturan yang bergantung padanya.) Berhati-hatilah, karena hal ini dapat berdampak luas.  Jika ragu, tambahkan tanda "-I" ke COPTS.
Jalur   | 
      
          link_extra_lib
         | 
        
                     Label; defaultnya adalah  
    Secara default, biner C++ ditautkan dengan   | 
      
          linkopts
         | 
        
                     Daftar string; defaultnya adalah  LINKOPTS sebelum
menautkan target biner.
    Setiap elemen dalam daftar ini yang tidak diawali dengan   | 
      
          linkshared
         | 
        
                     Boolean; defaultnya adalah  linkshared=True dalam aturan Anda. Secara default, opsi ini dinonaktifkan.
  Kehadiran tanda ini berarti penautan terjadi dengan tanda  
  Jika Anda menentukan   | 
      
          linkstatic
         | 
        
                     Boolean; defaultnya adalah  cc_binary dan
cc_test: tautkan biner dalam mode
statis. Untuk cc_library.link_static: lihat di bawah.
Secara default, opsi ini aktif untuk  
  Jika diaktifkan dan ini adalah biner atau pengujian, opsi ini akan memberi tahu alat build untuk menautkan
   Sebenarnya ada tiga cara berbeda untuk menautkan file yang dapat dieksekusi: 
 
Jika atribut  
Atribut  
Hanya ada sedikit kode yang dibuat dengan   | 
      
          local_defines
         | 
        
                     Daftar string; defaultnya adalah  -D dan ditambahkan ke command line kompilasi untuk target ini,
tetapi tidak untuk dependensinya.
         | 
      
          malloc
         | 
        
                     Label; defaultnya adalah  
  Secara default, biner C++ ditautkan ke   | 
      
          module_interfaces
         | 
        
                     Daftar label; defaultnya adalah  Standar C++ tidak memiliki batasan tentang ekstensi file antarmuka modul 
 Penggunaan dilindungi oleh flag
  | 
      
          nocopts
         | 
        
                     String; default-nya adalah  COPTS yang sudah ada dan cocok dengan ekspresi reguler ini
(termasuk nilai yang ditentukan secara eksplisit dalam atribut copts aturan)
akan dihapus dari COPTS untuk tujuan mengompilasi aturan ini.
Atribut ini tidak diperlukan atau digunakan
di luar third_party.  Nilai tidak diproses sebelumnya
dengan cara apa pun selain penggantian variabel "Make".
         | 
      
          reexport_deps
         | 
        
                     Daftar label; defaultnya adalah   | 
      
          stamp
         | 
        
                     Bilangan bulat; defaultnya adalah  
 Biner yang diberi stempel tidak dibangun ulang kecuali jika dependensinya berubah.  | 
      
          win_def_file
         | 
        
                     Label; defaultnya adalah  Atribut ini hanya boleh digunakan jika Windows adalah platform target. Opsi ini dapat digunakan untuk mengekspor simbol selama penautan library bersama.  | 
      
cc_toolchain
Lihat sumber aturancc_toolchain(name, all_files, ar_files, as_files, compatible_with, compiler_files, compiler_files_without_includes, coverage_files, deprecation, distribs, dwp_files, dynamic_runtime_lib, exec_compatible_with, exec_properties, exec_transition_for_inputs, features, libc_top, licenses, linker_files, module_map, objcopy_files, output_licenses, restricted_to, static_runtime_lib, strip_files, supports_header_parsing, supports_param_files, tags, target_compatible_with, testonly, toolchain_config, toolchain_identifier, toolchains, visibility)
Mewakili toolchain C++.
Aturan ini bertanggung jawab untuk:
- 
      Mengumpulkan semua artefak yang diperlukan agar tindakan C++ dapat dijalankan. Hal ini dilakukan oleh
      atribut seperti 
all_files,compiler_files,linker_files, atau atribut lain yang diakhiri dengan_files). Atribut ini paling umum berupa filegroup yang menggabungkan semua file yang diperlukan. - 
      Membuat command line yang benar untuk tindakan C++. Hal ini dilakukan menggunakan
      penyedia 
CcToolchainConfigInfo(detail di bawah). 
  Gunakan atribut toolchain_config untuk mengonfigurasi toolchain C++.
  Lihat juga
  
    halaman
   ini untuk mengetahui dokumentasi konfigurasi toolchain C++ dan pemilihan toolchain yang lebih mendalam.
  Gunakan tags = ["manual"] agar toolchain tidak dibangun dan dikonfigurasi
  secara tidak perlu saat memanggil bazel build //...
Argumen
| Atribut | |
|---|---|
name | 
        
           Nama; wajib Nama unik untuk target ini.  | 
      
          all_files
         | 
        
                     Label; wajib Koleksi semua artefak cc_toolchain. Artefak ini akan ditambahkan sebagai input ke semua tindakan terkait rules_cc (kecuali tindakan yang menggunakan set artefak yang lebih presisi dari atribut di bawah). Bazel mengasumsikan bahwaall_files adalah superset
dari semua atribut penyedia artefak lainnya (misalnya, kompilasi linkstamp memerlukan file kompilasi
dan link, sehingga menggunakan all_files).
Inilah yang ada di   | 
      
          ar_files
         | 
        
                     Label; defaultnya adalah   | 
      
          as_files
         | 
        
                     Label; defaultnya adalah   | 
      
          compiler_files
         | 
        
                     Label; wajib Kumpulan semua artefak cc_toolchain yang diperlukan untuk tindakan kompilasi. | 
      
          compiler_files_without_includes
         | 
        
                     Label; defaultnya adalah   | 
      
          coverage_files
         | 
        
                     Label; defaultnya adalah   | 
      
          dwp_files
         | 
        
                     Label; wajib Kumpulan semua artefak cc_toolchain yang diperlukan untuk tindakan dwp. | 
      
          dynamic_runtime_lib
         | 
        
                     Label; defaultnya adalah  Ini akan digunakan saat fitur 'static_link_cpp_runtimes' diaktifkan, dan kita menautkan dependensi secara dinamis.  | 
      
          exec_transition_for_inputs
         | 
        
                     Boolean; defaultnya adalah   | 
      
          libc_top
         | 
        
                     Label; defaultnya adalah   | 
      
          linker_files
         | 
        
                     Label; wajib Kumpulan semua artefak cc_toolchain yang diperlukan untuk tindakan penautan. | 
      
          module_map
         | 
        
                     Label; defaultnya adalah   | 
      
          objcopy_files
         | 
        
                     Label; wajib Kumpulan semua artefak cc_toolchain yang diperlukan untuk tindakan objcopy. | 
      
          output_licenses
         | 
        
                     Daftar string; defaultnya adalah   | 
      
          static_runtime_lib
         | 
        
                     Label; defaultnya adalah  Ini akan digunakan saat fitur 'static_link_cpp_runtimes' diaktifkan, dan kita menautkan dependensi secara statis.  | 
      
          strip_files
         | 
        
                     Label; wajib Kumpulan semua artefak cc_toolchain yang diperlukan untuk tindakan strip. | 
      
          supports_header_parsing
         | 
        
                     Boolean; defaultnya adalah   | 
      
          supports_param_files
         | 
        
                     Boolean; defaultnya adalah   | 
      
          toolchain_config
         | 
        
                     Label; wajib Label aturan yang menyediakancc_toolchain_config_info.
         | 
      
          toolchain_identifier
         | 
        
                     String; default-nya adalah  
  Hingga masalah #5380 diperbaiki
  cara yang direkomendasikan untuk mengaitkan   | 
      
cc_toolchain_suite
Lihat sumber aturancc_toolchain_suite(name, compatible_with, deprecation, distribs, features, licenses, restricted_to, tags, target_compatible_with, testonly, toolchains, visibility)
Tidak digunakan lagi: aturan ini tidak melakukan apa pun dan akan dihapus.
Argumen
| Atribut | |
|---|---|
name | 
        
           Nama; wajib Nama unik untuk target ini.  | 
      
fdo_prefetch_hints
Lihat sumber aturanfdo_prefetch_hints(name, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, features, profile, restricted_to, tags, target_compatible_with, testonly, toolchains, visibility)
Mewakili profil petunjuk pengambilan data FDO yang ada di ruang kerja. Contoh:
fdo_prefetch_hints(
    name = "hints",
    profile = "//path/to/hints:profile.afdo",
)
Argumen
| Atribut | |
|---|---|
name | 
        
           Nama; wajib Nama unik untuk target ini.  | 
      
          profile
         | 
        
                     Label; wajib Label profil petunjuk. File petunjuk memiliki ekstensi .afdo Label juga dapat mengarah ke aturan fdo_absolute_path_profile. | 
      
fdo_profile
Lihat sumber aturanfdo_profile(name, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, features, memprof_profile, profile, proto_profile, restricted_to, tags, target_compatible_with, testonly, toolchains, visibility)
Mewakili profil FDO yang ada di ruang kerja. Contoh:
fdo_profile(
    name = "fdo",
    profile = "//path/to/fdo:profile.zip",
)
Argumen
| Atribut | |
|---|---|
name | 
        
           Nama; wajib Nama unik untuk target ini.  | 
      
          memprof_profile
         | 
        
                     Label; defaultnya adalah   | 
      
          profile
         | 
        
                     Label; wajib Label profil FDO atau aturan yang membuatnya. File FDO dapat memiliki salah satu ekstensi berikut: .profraw untuk profil LLVM yang tidak diindeks, .profdata untuk profil LLVM yang diindeks, .zip yang berisi profil profraw LLVM, .afdo untuk profil AutoFDO, .xfdo untuk profil XBinary. Label juga dapat mengarah ke aturan fdo_absolute_path_profile. | 
      
          proto_profile
         | 
        
                     Label; defaultnya adalah   | 
      
memprof_profile
Lihat sumber aturanmemprof_profile(name, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, features, profile, restricted_to, tags, target_compatible_with, testonly, toolchains, visibility)
Mewakili profil MEMPROF yang ada di ruang kerja. Contoh:
memprof_profile(
    name = "memprof",
    profile = "//path/to/memprof:profile.afdo",
)
Argumen
| Atribut | |
|---|---|
name | 
        
           Nama; wajib Nama unik untuk target ini.  | 
      
          profile
         | 
        
                     Label; wajib Label profil MEMPROF. Profil diharapkan memiliki ekstensi .profdata (untuk profil memprof yang diindeks/disimbolkan), atau ekstensi .zip untuk file zip yang berisi file memprof.profdata. Label juga dapat mengarah ke aturan fdo_absolute_path_profile. | 
      
propeller_optimize
Lihat sumber aturanpropeller_optimize(name, cc_profile, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, features, ld_profile, restricted_to, tags, target_compatible_with, testonly, toolchains, 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"
)
Argumen
| Atribut | |
|---|---|
name | 
        
           Nama; wajib Nama unik untuk target ini.  | 
      
          cc_profile
         | 
        
                     Label; wajib Label profil yang diteruskan ke berbagai tindakan kompilasi. File ini memiliki ekstensi .txt. | 
      
          ld_profile
         | 
        
                     Label; wajib Label profil yang diteruskan ke tindakan link. File ini memiliki ekstensi .txt. |