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

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

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

คุณควรใช้ฟังก์ชันตัวช่วยที่มีอยู่ที่ @rules_cc//cc:find_cc_toolchain.bzl เพื่อใช้ Toolchain ของ CC จากกฎ Starlark

หากต้องการใช้ Toolchain ของ C++ ในกฎ ให้ตั้งค่าพารามิเตอร์ toolchains เป็น use_cc_toolchain() จากนั้นในการใช้งานกฎ ให้ใช้ find_cpp_toolchain(ctx) เพื่อรับ CcToolchainInfo ดูตัวอย่างการทำงานที่สมบูรณ์ได้ในตัวอย่าง rules_cc examples

การสร้างบรรทัดคำสั่งและตัวแปรสภาพแวดล้อมโดยใช้ 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 เพื่อดูข้อมูลล่าสุด