Mengintegrasikan dengan Aturan C++

Tetap teratur dengan koleksi Simpan dan kategorikan konten berdasarkan preferensi Anda.
Laporkan masalah Lihat sumber

Halaman ini menjelaskan cara berintegrasi dengan aturan C++ pada 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 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 penerapan aturan, gunakan find_cpp_toolchain(ctx) untuk mendapatkan CcToolchainInfo. Contoh lengkap cara kerja dapat ditemukan dalam 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 seperti aturan C++, tetapi tanpa menggunakan tindakan C++ secara langsung. Hal ini karena saat menulis tindakan kita sendiri, perilaku tersebut harus berperilaku 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-hal berikut:

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 cara kerja dapat ditemukan dalam contoh rules_cc.

Menerapkan aturan Starlark yang bergantung pada aturan C++ dan/atau aturan C++ yang dapat bergantung pada

Sebagian besar aturan C++ menyediakan CcInfo, penyedia yang berisi CompilationContext dan LinkingContext. Melalui link ini, Anda dapat mengakses informasi seperti semua header atau library transitif yang akan ditautkan. Dari CcInfo dan dari aturan khusus Starlark, CcToolchainInfo seharusnya bisa mendapatkan semua informasi yang diperlukan.

Jika aturan Starlark kustom menyediakan CcInfo, ini 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 aturan java_library ingin menyebarkan dependensi native hingga ke java_binary, aturan tersebut tidak boleh menyediakan CcInfo secara langsung (cc_binary bergantung pada java_library tidak masuk akal), sebaiknya gabungkan, misalnya, JavaCcInfo.

Contoh lengkap cara kerja 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.