Halaman ini menjelaskan cara berintegrasi dengan aturan C++ di berbagai level.
Mengakses toolchain C++
Karena
migrasi aturan C++ yang sedang berlangsung
ke platform dan
chains, Anda
harus menggunakan fungsi bantuan yang tersedia di
@bazel_tools//tools/cpp:toolchain_utils.bzl,
yang berfungsi baik ketika toolchain
dinonaktifkan dan diaktifkan. Untuk bergantung pada C++
toolchain dalam aturan Anda, tambahkan
Label
atribut 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 kerja lengkap dapat ditemukan
dalam contoh rules_cc.
Menghasilkan command line dan variabel lingkungan menggunakan toolchain C++
Biasanya, Anda akan mengintegrasikannya dengan toolchain C++ untuk memiliki penanda baris perintah seperti yang dilakukan 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 command line C++ ke alat yang memanggil compiler C++ di belakang layar.
Aturan C++ menggunakan cara khusus untuk membuat baris perintah berdasarkan fitur konfigurasi. Untuk membuat baris perintah, Anda memerlukan hal berikut:
features
danaction_configs
- ini 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 akan
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, informasi seperti semua {i>header<i} transitif dapat diakses
atau {i>library<i} untuk ditautkan. Dari CcInfo
dan dari CcToolchainInfo
kustom
Aturan Starlark harus bisa mendapatkan
semua informasi yang mereka butuhkan.
Jika aturan Starlark kustom menyediakan CcInfo
, itu adalah sinyal bagi aturan C++ yang
mereka juga dapat bergantung pada {i>database<i}. Namun, berhati-hatilah - jika Anda hanya perlu menerapkan
CcInfo
menelusuri grafik ke aturan biner yang kemudian memanfaatkannya, gabungkan
CcInfo
di penyedia lain. Misalnya, jika java_library
aturan ingin
untuk menyebarkan dependensi native hingga java_binary
, aktivitas ini tidak boleh menyediakan
CcInfo
secara langsung (cc_binary
bergantung pada java_library
tidak masuk akal),
kode 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 diperbarui setelah API stabil. Ikuti #4570 untuk mendapatkan info terbaru informasi tambahan.