การผสานรวมกับกฎ 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

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

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

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

แต่ก็ยังมีตัวรับค่าเฉพาะเครื่องมือ เช่น compiler_executable โปรดใช้ get_tool_for_action แทน เนื่องจากระบบจะนำตัวรับค่าเฉพาะเครื่องมือออกในที่สุด

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

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

กฎ 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 เพื่อดูข้อมูล ล่าสุด