Halaman ini menjelaskan cara berintegrasi dengan aturan C++ di berbagai level.
Mengakses toolchain C++
Karena
migrasi aturan C++ yang berkelanjutan
ke platform dan
toolchain, Anda
harus menggunakan fungsi helper 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 penerapan aturan, gunakan
find_cpp_toolchain(ctx)
untuk mendapatkan
CcToolchainInfo
.
Contoh kerja lengkap dapat ditemukan
dalam contoh rules_cc.
Menghasilkan command line dan variabel lingkungan menggunakan toolchain C++
Biasanya, Anda akan mengintegrasikan dengan toolchain C++ agar memiliki flag command line yang sama seperti aturan C++, tetapi tanpa menggunakan tindakan C++ secara langsung. Hal ini karena saat menulis tindakan kita sendiri, tindakan tersebut harus berperilaku konsisten dengan toolchain C++ - misalnya, meneruskan flag command line C++ ke alat yang memanggil compiler C++ di belakang layar.
Aturan C++ menggunakan cara khusus untuk membuat command line berdasarkan konfigurasi fitur. Untuk membuat command line, Anda memerlukan hal berikut:
features
danaction_configs
- keduanya berasal dariCcToolchainConfigInfo
dan dienkapsulasi dalamCcToolchainInfo
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 nilai tersebut, karena pengambil khusus alat pada akhirnya akan dihapus.
Contoh kerja lengkap dapat ditemukan dalam contoh rules_cc.
Mengimplementasikan aturan Starlark yang bergantung pada aturan C++ dan/atau yang dapat diandalkan oleh aturan C++
Sebagian besar aturan C++ menyediakan
CcInfo
,
penyedia yang berisi CompilationContext
dan
LinkingContext
.
Melalui ini, Anda dapat mengakses informasi seperti semua header atau library transitif yang akan ditautkan. Dari CcInfo
dan CcToolchainInfo
aturan Starlark kustom
harus bisa mendapatkan semua informasi yang mereka butuhkan.
Jika aturan Starlark kustom menyediakan CcInfo
, ini adalah sinyal bagi aturan C++ bahwa
aturan tersebut juga dapat bergantung pada aturan tersebut. Namun, berhati-hatilah - jika Anda hanya perlu menyebarkan
CcInfo
melalui grafik ke aturan biner yang kemudian memanfaatkannya, gabungkan
CcInfo
dalam penyedia lain. Misalnya, jika aturan java_library
ingin
menyebarkan dependensi native hingga java_binary
, aturan tersebut tidak boleh menyediakan
CcInfo
secara langsung (cc_binary
bergantung pada java_library
tidak masuk akal),
aturan tersebut harus menggabungkannya, misalnya, JavaCcInfo
.
Contoh kerja 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 mendapatkan informasi terbaru.