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

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

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

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

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

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

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

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

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

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

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

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

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

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

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