การผสานรวมกับกฎ C++

หน้านี้จะอธิบายวิธีผสานรวมกับกฎ C++ ในระดับต่างๆ

การเข้าถึงเชนเครื่องมือ C++

เนื่องจากการย้ายข้อมูลกฎ C++ อย่างต่อเนื่องไปยังแพลตฟอร์มและ toolchains คุณจึงควรใช้ฟังก์ชันตัวช่วยที่มีให้บริการที่ @bazel_tools//tools/cpp:toolchain_utils.bzl ซึ่งทำงานทั้งในกรณีที่ปิดใช้หรือเปิด Toolchain หากต้องการใช้เครื่องมือ C++ ในกฎ ให้เพิ่มแอตทริบิวต์ Label ที่ชื่อว่า _cc_toolchain แล้วชี้ไปที่ @bazel_tools//tools/cpp:current_cc_toolchain (อินสแตนซ์ของกฎ cc_toolchain_alias ที่ชี้ไปยังชุดเครื่องมือ C++ ที่เลือกในปัจจุบัน) จากนั้นเมื่อใช้งานกฎ ให้ใช้ find_cpp_toolchain(ctx) เพื่อรับ CcToolchainInfo ดูตัวอย่างที่ใช้งานได้ที่สมบูรณ์ได้ในตัวอย่าง rules_cc

การสร้างบรรทัดคำสั่งและตัวแปรสภาพแวดล้อมโดยใช้เชนเครื่องมือ C++

โดยปกติแล้ว คุณจะผสานรวมกับชุดเครื่องมือ C++ เพื่อให้มีแฟล็กบรรทัดคำสั่งเหมือนกับกฎ C++ แต่จะใช้การดำเนินการ C++ โดยตรงไม่ได้ เพราะเมื่อเขียนการดำเนินการของเราเอง การทำงานจะต้อง สอดคล้องกับชุดเครื่องมือ C++ เช่น การส่งแฟล็กบรรทัดคำสั่ง C++ ไปยังเครื่องมือที่เรียกใช้คอมไพเลอร์ C++ ในเบื้องหลัง

กฎ C++ ใช้วิธีพิเศษในการสร้างบรรทัดคำสั่งตามการกำหนดค่าฟีเจอร์ คุณต้องมีสิ่งต่อไปนี้เพื่อสร้างบรรทัดคำสั่ง

แต่ยังมี Getter เฉพาะเครื่องมือ เช่น compiler_executable เลือกใช้ get_tool_for_action มากกว่านี้ เนื่องจาก Getter เฉพาะเครื่องมือจะถูกนำออกในที่สุด

ดูตัวอย่างที่ใช้งานได้ที่สมบูรณ์ได้ในตัวอย่าง rules_cc

การใช้กฎ Starlark ที่ขึ้นอยู่กับกฎ C++ และ/หรือกฎ C++ ที่พึ่งพาได้

กฎ C++ ส่วนใหญ่จะระบุ CcInfo ผู้ให้บริการที่มี CompilationContext และ LinkingContext รูปแบบเหล่านี้ทำให้สามารถเข้าถึงข้อมูล เช่น ส่วนหัวหรือไลบรารีที่จะลิงก์ จาก CcInfo และจากกฎ Starlark ที่กำหนดเอง CcToolchainInfo ข้อควรจะได้รับข้อมูลทั้งหมดที่ต้องการ

หากกฎ Starlark ที่กำหนดเองระบุ CcInfo ก็จะเป็นสัญญาณไปยังกฎ C++ ที่กฎดังกล่าวก็ใช้บังคับด้วย อย่างไรก็ตาม โปรดใช้ความระมัดระวังหากคุณต้องการเผยแพร่ CcInfo ผ่านกราฟไปยังกฎไบนารีหลังจากนั้น ให้รวม CcInfo ในผู้ให้บริการรายอื่น เช่น หากกฎ java_library ต้องการเผยแพร่ทรัพยากร Dependency แบบเนทีฟจนถึง java_binary ก็ไม่ควรระบุ CcInfo โดยตรง (cc_binary ขึ้นอยู่กับ java_library ไม่เหมาะสม) และควรรวมระเบียนภายใน เช่น JavaCcInfo

ดูตัวอย่างที่ใช้งานได้ที่สมบูรณ์ได้ในตัวอย่าง rules_cc

การใช้ตรรกะและการดำเนินการของกฎ C++ ซ้ำ

ยังไม่เสถียร ส่วนนี้จะอัปเดตเมื่อ API เสถียรแล้ว ติดตาม #4570 เพื่อรับข้อมูลล่าสุด