Mengintegrasikan dengan Aturan C++

Laporkan masalah Lihat sumber Per Malam · 7,2 · 7,1 · 7,0 · 6,5 · 6,4

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:

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