Mengintegrasikan dengan Aturan C++

Laporkan masalah Lihat sumber Nightly · 7.4 . 7.3 · 7.2 · 7.1 · 7.0 · 6.5

Halaman ini menjelaskan cara berintegrasi dengan aturan C++ di berbagai tingkat.

Mengakses toolchain C++

Anda harus menggunakan fungsi bantuan 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 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 dengan 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:

Masih ada pengambil khusus alat, seperti compiler_executable. Pilih get_tool_for_action daripada nilai tersebut, karena pengambil khusus alat pada akhirnya akan dihapus.

Contoh lengkap yang berfungsi dapat ditemukan di 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, Anda dapat mengakses informasi seperti semua header atau library transitif yang akan ditautkan. Dari CcInfo dan dari aturan Starlark kustom CcToolchainInfo, Anda akan dapat mendapatkan semua informasi yang diperlukan.

Jika aturan Starlark kustom menyediakan CcInfo, ini adalah 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 di penyedia lain. Misalnya, jika aturan java_library ingin memperluas dependensi native hingga java_binary, aturan tersebut tidak boleh menyediakan CcInfo secara langsung (cc_binary yang bergantung pada java_library tidak masuk akal), tetapi harus menggabungkannya, misalnya, JavaCcInfo.

Contoh lengkap yang berfungsi dapat ditemukan di contoh rules_cc.

Menggunakan kembali logika dan tindakan aturan C++

Belum stabil; Bagian ini akan diupdate setelah API stabil. Ikuti #4570 untuk mengetahui informasi terbaru.