หน้านี้อธิบายวิธีผสานรวมกับกฎ C++ ในระดับต่างๆ
การเข้าถึงเครื่องมือเชน C++
เนื่องจาก
การย้ายข้อมูลกฎ C++ อย่างต่อเนื่อง
แพลตฟอร์มและ
toolchains คุณ
ควรใช้ฟังก์ชันตัวช่วยที่มีที่
@bazel_tools//tools/cpp:toolchain_utils.bzl,
ซึ่งจะทำงานทั้งเมื่อปิดใช้และเปิดใช้ Toolchain เพื่อขึ้นอยู่กับ C++
Toolchain ในกฎของคุณ เพิ่ม
Label
แอตทริบิวต์ชื่อ _cc_toolchain
แล้วชี้ว่า
ถึง @bazel_tools//tools/cpp:current_cc_toolchain
(อินสแตนซ์ของ
กฎ cc_toolchain_alias
รายการที่ชี้ไปยังเครื่องมือเชน C++ ที่เลือกในปัจจุบัน)
จากนั้นในการใช้งานกฎ ให้ใช้
find_cpp_toolchain(ctx)
เพื่อรับ
CcToolchainInfo
พบตัวอย่างการใช้งานที่สมบูรณ์
ในตัวอย่าง rules_cc
การสร้างบรรทัดคำสั่งและตัวแปรสภาพแวดล้อมโดยใช้ Toolchain ของ C++
โดยทั่วไปแล้ว คุณจะต้องผสานรวมกับ Toolchain ของ C++ เพื่อให้ แฟล็กบรรทัดคำสั่งเช่นที่กฎ C++ ทำ แต่ไม่ได้ใช้การดำเนินการ C++ โดยตรง เพราะเมื่อเขียนการดำเนินการของเราเอง การกระทำนั้นจะต้อง อย่างสอดคล้องกันกับ Toolchain ของ C++ เช่น ผ่านบรรทัดคำสั่ง C++ ไปยังเครื่องมือที่จะเรียกใช้คอมไพเลอร์ C++ ในเบื้องหลัง
กฎ C++ ใช้วิธีพิเศษในการสร้างบรรทัดคำสั่งตาม feature การกำหนดค่า ในการสร้างบรรทัดคำสั่ง คุณต้องมีสิ่งต่อไปนี้
features
และaction_configs
- รายการเหล่านี้มาจากCcToolchainConfigInfo
และห่อหุ้มอยู่ในCcToolchainInfo
FeatureConfiguration
- แสดงผลโดย cc_common.configure_features- cc ตัวแปรการกำหนดค่า Toolchain - แสดงผลโดย cc_common.create_compile_variables หรือ cc_common.create_link_variables.
ยังมี Getter เฉพาะเครื่องมือ เช่น
compiler_executable
เลือกใช้ get_tool_for_action
มากกว่าตัวเลือกเหล่านี้ เนื่องจาก Getter เฉพาะเครื่องมือจะ
และถูกนำออกในท้ายที่สุด
พบตัวอย่างการใช้งานที่สมบูรณ์ ในตัวอย่าง rules_cc
การใช้กฎของ Starlark ที่ขึ้นอยู่กับกฎ C++ และ/หรือกฎ C++ ที่ใช้ได้
กฎ C++ ส่วนใหญ่มี
CcInfo
ผู้ให้บริการที่มี CompilationContext
และ
LinkingContext
ด้วยวิธีนี้ คุณจะสามารถเข้าถึงข้อมูล เช่น ส่วนหัวทรานซิชันทั้งหมด
หรือไลบรารีที่จะลิงก์ จาก CcInfo
และจาก CcToolchainInfo
ที่กำหนดเอง
กฎ Starlark ควรจะได้รับข้อมูลทั้งหมดที่ต้องการ
ถ้ากฎ Starlark ที่กำหนดเองระบุ CcInfo
จะเป็นสัญญาณไปยังกฎ C++
พวกเขาก็ยังพึ่งพาได้ อย่างไรก็ตาม โปรดระมัดระวัง - หากคุณต้องการเผยแพร่เฉพาะ
CcInfo
ผ่านกราฟไปยังกฎไบนารีที่ใช้ประโยชน์จากกราฟ รวม
CcInfo
ในผู้ให้บริการรายอื่น ตัวอย่างเช่น หากต้องการกฎ java_library
ข้อ
ในการเผยแพร่ทรัพยากร Dependency แบบเนทีฟไปยัง java_binary
ซึ่งไม่ควรระบุ
CcInfo
โดยตรง (cc_binary
ขึ้นอยู่กับ java_library
ไม่สมเหตุสมผล)
ควรรวมเข้าไว้ เช่น JavaCcInfo
พบตัวอย่างการใช้งานที่สมบูรณ์ ในตัวอย่าง rules_cc
การใช้ตรรกะและการทำงานของกฎ C++ ซ้ำ
ยังไม่เสถียร ส่วนนี้จะอัปเดตเมื่อ API เสถียรแล้ว ติดตาม #4570 สำหรับข้อมูลล่าสุด