Halaman ini menjelaskan cara berintegrasi dengan aturan C++ di berbagai tingkat.
Mengakses toolchain C++
Anda harus menggunakan fungsi helper yang tersedia di
@rules_cc//cc:find_cc_toolchain.bzl
untuk bergantung pada toolchain CC dari aturan Starlark.
Untuk bergantung pada toolchain C++ dalam aturan Anda, tetapkan parameter toolchains
ke
use_cc_toolchain()
. Kemudian, dalam penerapan aturan, gunakan
find_cpp_toolchain(ctx)
untuk mendapatkan
CcToolchainInfo
. Contoh lengkap yang berfungsi dapat ditemukan di rules_cc
examples.
Membuat command line dan variabel lingkungan menggunakan toolchain C++
Biasanya, Anda akan berintegrasi dengan toolchain C++ untuk memiliki flag command line yang sama seperti yang dilakukan 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 getter khusus alat, seperti
compiler_executable.
Lebih baik menggunakan get_tool_for_action
daripada yang lain, karena getter 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 aturan C++ yang dapat bergantung pada aturan Starlark
Sebagian besar aturan C++ menyediakan
CcInfo
,
penyedia yang berisi CompilationContext
dan
LinkingContext
.
Melalui ini, Anda dapat mengakses informasi seperti semua header transitif atau library yang akan ditautkan. Dari CcInfo
dan dari aturan Starlark kustom CcToolchainInfo
harus dapat memperoleh semua informasi yang mereka butuhkan.
Jika aturan Starlark kustom menyediakan CcInfo
, aturan tersebut merupakan sinyal bagi 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, bungkus
CcInfo
dalam penyedia yang berbeda. Misalnya, jika aturan java_library
ingin
menyebarkan dependensi native ke java_binary
, aturan tersebut tidak boleh menyediakan
CcInfo
secara langsung (cc_binary
yang bergantung pada java_library
tidak masuk akal),
aturan tersebut harus membungkusnya, misalnya, dalam 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 mendapatkan informasi terbaru.