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

วันที่ รายงานปัญหา ดูแหล่งที่มา ตอนกลางคืน · 7.3 · 7.2 · 7.1 · 7.0 · 6.5

หน้านี้อธิบายวิธีผสานรวมกับกฎ 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 การกำหนดค่า ในการสร้างบรรทัดคำสั่ง คุณต้องมีสิ่งต่อไปนี้

ยังมี 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 สำหรับข้อมูลล่าสุด