Halaman ini menjelaskan cara berintegrasi dengan aturan C++ pada berbagai tingkat.
Mengakses toolchain C++
Karena migrasi aturan C++ yang sedang berlangsung ke platform dan Toolchain, Anda harus menggunakan fungsi bantuan yang tersedia di @bazel_tools//tools/cpp:toolchain_utils.bzl, yang berfungsi saat toolchain dinonaktifkan dan diaktifkan. Untuk bergantung pada toolchain C++
dalam aturan Anda, tambahkan atribut
Label
bernama _cc_toolchain
dan arahkan
ke @bazel_tools//tools/cpp:current_cc_toolchain
(instance aturan
cc_toolchain_alias
yang mengarah ke toolchain C++ yang saat ini dipilih).
Kemudian, dalam implementasi aturan, gunakan find_cpp_toolchain(ctx)
untuk mendapatkan CcToolchainInfo
.
Contoh kerja yang lengkap dapat ditemukan
dalam contoh rules_cc.
Menghasilkan command line dan variabel lingkungan menggunakan toolchain C++
Biasanya, Anda akan berintegrasi dengan toolchain C++ untuk memiliki flag command line yang sama seperti aturan C++, tetapi tanpa menggunakan tindakan C++ secara langsung. Hal ini karena saat menulis tindakan sendiri, perilaku tersebut harus konsisten dengan toolchain C++ - misalnya, meneruskan flag command line C++ ke alat yang memanggil compiler C++ di balik layar.
Aturan C++ menggunakan cara khusus untuk membuat command line berdasarkan konfigurasi fitur. Untuk membuat command line, Anda memerlukan hal berikut:
features
danaction_configs
- ini berasal dariCcToolchainConfigInfo
dan dienkapsulasi diCcToolchainInfo
FeatureConfiguration
- ditampilkan oleh cc_common.configure_features- Variabel konfigurasi toolchain cc - ditampilkan oleh cc_common.create_compile_variables atau cc_common.create_link_variables.
Masih ada pengambil khusus alat, seperti
compiler_executable.
Pilih get_tool_for_action
daripada ini, karena pengambil khusus alat pada akhirnya akan dihapus.
Contoh kerja yang lengkap dapat ditemukan dalam contoh rules_cc.
Menerapkan aturan Starlark yang bergantung pada aturan C++ dan/atau aturan C++ yang dapat bergantung pada
Sebagian besar aturan C++ menyediakan
CcInfo
,
penyedia yang berisi CompilationContext
dan
LinkingContext
.
Melalui peristiwa ini, Anda dapat mengakses informasi seperti semua header atau library transitif untuk ditautkan. Dari CcInfo
dan dari CcToolchainInfo
, aturan Starlark kustom harus dapat memperoleh semua informasi yang diperlukan.
Jika aturan Starlark kustom menyediakan CcInfo
, ini adalah sinyal untuk aturan C++ yang juga dapat bergantung padanya. Namun, berhati-hatilah - jika Anda hanya perlu menyebarkan CcInfo
melalui grafik ke aturan biner yang kemudian menggunakannya, gabungkan CcInfo
ke penyedia yang berbeda. Misalnya, jika aturan java_library
ingin
menyebarkan dependensi native hingga java_binary
, aturan tersebut tidak boleh memberikan
CcInfo
secara langsung (cc_binary
bergantung pada java_library
yang tidak masuk akal),
sebaiknya menggabungkannya, misalnya, JavaCcInfo
.
Contoh kerja yang lengkap dapat ditemukan dalam contoh rules_cc.
Menggunakan kembali logika dan tindakan aturan C++
Belum stabil; Bagian ini akan diupdate setelah API stabil. Ikuti #4570 untuk mengetahui informasi terbaru.