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:
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 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.