Halaman ini menjelaskan cara berintegrasi dengan aturan C++ di 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 baik saat toolchain dinonaktifkan maupun 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 lengkap yang berfungsi dapat ditemukan
di contoh rules_cc.
Membuat command line dan variabel lingkungan menggunakan toolchain C++
Biasanya, Anda akan berintegrasi dengan toolchain C++ untuk memiliki flag command line yang sama dengan aturan C++, tetapi tanpa menggunakan tindakan C++ secara langsung. Hal ini karena saat menulis tindakan kita sendiri, tindakan tersebut harus berperilaku secara 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
- 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 ini, karena pengambil khusus alat pada akhirnya
akan dihapus.
Contoh lengkap yang berfungsi dapat ditemukan di contoh rules_cc.
Menerapkan aturan Starlark yang bergantung pada aturan C++ dan/atau yang dapat bergantung pada aturan C++
Sebagian besar aturan C++ menyediakan
CcInfo
,
penyedia yang berisi CompilationContext
dan
LinkingContext
.
Melalui hal ini, Anda dapat mengakses informasi seperti semua header atau library transisional
yang akan ditautkan. Dari CcInfo
dan dari aturan Starlark kustom CcToolchainInfo
, Anda akan dapat mendapatkan semua informasi yang diperlukan.
Jika aturan Starlark kustom menyediakan CcInfo
, ini adalah sinyal ke aturan C++ bahwa
aturan tersebut juga dapat bergantung padanya. Namun, berhati-hatilah - jika Anda hanya perlu menyebarkan
CcInfo
melalui grafik ke aturan biner yang kemudian menggunakannya, gabungkan
CcInfo
di penyedia lain. Misalnya, jika aturan java_library
ingin
memperluas dependensi native hingga java_binary
, aturan tersebut tidak boleh menyediakan
CcInfo
secara langsung (cc_binary
yang bergantung pada java_library
tidak masuk akal),
tetapi harus menggabungkannya, misalnya, JavaCcInfo
.
Contoh lengkap yang berfungsi dapat ditemukan di contoh rules_cc.
Menggunakan kembali logika dan tindakan aturan C++
Belum stabil; Bagian ini akan diperbarui setelah API stabil. Ikuti #4570 untuk mengetahui informasi terbaru.