Halaman ini menjelaskan cara mengintegrasikan dengan aturan C++ di berbagai level.
Mengakses toolchain C++
Karena
migrasi aturan C++ yang sedang berlangsung
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 dari 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 lengkap yang berfungsi dapat ditemukan dalam contoh rules_cc.
Membuat command line dan variabel lingkungan menggunakan toolchain C++
Biasanya, Anda mengintegrasikan dengan toolchain C++ untuk memiliki tanda command line yang sama seperti aturan C++, tetapi tanpa menggunakan tindakan C++ secara langsung. Hal ini karena ketika 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 belakang layar.
Aturan C++ menggunakan cara khusus untuk membuat command line berdasarkan konfigurasi fitur. Untuk membuat command line, Anda memerlukan hal berikut:
featuresdanaction_configs- keduanya berasal dariCcToolchainConfigInfodan dienkapsulasi dalamCcToolchainInfoFeatureConfiguration- 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 opsi ini, karena pengambil khusus alat pada akhirnya akan dihapus.
Contoh lengkap yang berfungsi dapat ditemukan dalam contoh rules_cc.
Menerapkan 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 untuk ditautkan. Dari CcInfo dan dari CcToolchainInfo, aturan Starlark kustom akan bisa mendapatkan semua informasi yang diperlukan.
Jika aturan Starlark kustom menyediakan CcInfo, aturan tersebut merupakan 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 menggunakannya, gabungkan
CcInfo dalam penyedia yang berbeda. Misalnya, jika ingin
menyebarkan dependensi native hingga java_binary, aturan java_library tidak boleh menyediakan
CcInfo secara langsung (cc_binary bergantung pada java_library tidak mungkin diterapkan),
aturan harus menggabungkannya ke dalam, misalnya, JavaCcInfo.
Contoh lengkap yang berfungsi 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.