หน้านี้จะอธิบายวิธีผสานรวมกับกฎ 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++ ใช้การสร้างบรรทัดคำสั่งในลักษณะพิเศษโดยอิงตาม การกำหนดค่า ฟีเจอร์ คุณต้องมีสิ่งต่อไปนี้เพื่อสร้างบรรทัดคำสั่ง
featuresและaction_configs- สิ่งเหล่านี้มาจากCcToolchainConfigInfoและห่อหุ้มไว้ในCcToolchainInfoFeatureConfiguration- ส่งคืนโดย cc_common.configure_features- ตัวแปรการกำหนดค่า Toolchain ของ CC - ส่งคืนโดย cc_common.create_compile_variables หรือ cc_common.create_link_variables
ยังมี 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 เพื่อดูข้อมูลล่าสุด