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

รายงานปัญหา ดูแหล่งที่มา Nightly · 8.4 · 8.3 · 8.2 · 8.1 · 8.0 · 7.6

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

การเข้าถึง Toolchain ของ C++

เนื่องจากการย้ายข้อมูลกฎ C++ อย่างต่อเนื่องไปยังแพลตฟอร์มและทูลเชน คุณควรใช้ฟังก์ชันตัวช่วยที่มีอยู่ที่ @bazel_tools//tools/cpp:toolchain_utils.bzl ซึ่งจะทำงานได้ทั้งเมื่อปิดใช้และเปิดใช้ทูลเชน หากต้องการใช้เครื่องมือ 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++ ใช้การสร้างบรรทัดคำสั่งในลักษณะพิเศษตามการกำหนดค่าฟีเจอร์ หากต้องการสร้างบรรทัดคำสั่ง คุณต้องมีสิ่งต่อไปนี้

แต่ก็ยังมีตัวรับค่าเฉพาะเครื่องมือ เช่น 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ต้องการกฎ เพื่อเผยแพร่การอ้างอิงดั้งเดิมไปยังjava_binary ก็ไม่ควรระบุCcInfoโดยตรง (cc_binary ที่ขึ้นอยู่กับjava_library ไม่สมเหตุสมผล) แต่ควรห่อหุ้มไว้ใน เช่น JavaCcInfo

ดูตัวอย่างที่ใช้งานได้ทั้งหมดได้ในตัวอย่างของ rules_cc

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

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