หน้านี้จะอธิบายวิธีผสานรวมกับกฎ C++ ในระดับต่างๆ
การเข้าถึง Toolchain ของ C++
คุณควรใช้ฟังก์ชันช่วยที่มีอยู่ที่
@rules_cc//cc:find_cc_toolchain.bzl
เพื่อใช้เครื่องมือห่วงโซ่ CC จากกฎ Starlark
หากต้องการใช้เครื่องมือ C++ ในกฎ ให้ตั้งค่าพารามิเตอร์ toolchains
เป็น
use_cc_toolchain()
จากนั้นในการติดตั้งใช้งานกฎ ให้ใช้
find_cpp_toolchain(ctx)
เพื่อรับ
CcToolchainInfo
ดูตัวอย่างที่ใช้งานได้ทั้งหมดได้ใน rules_cc
examples
การสร้างบรรทัดคำสั่งและตัวแปรสภาพแวดล้อมโดยใช้เครื่องมือ C++
โดยปกติแล้ว คุณจะผสานรวมกับเครื่องมือ C++ เพื่อให้มีแฟล็กบรรทัดคำสั่งเดียวกันกับกฎ C++ แต่ไม่ต้องใช้การดำเนินการ C++ โดยตรง เนื่องจากเมื่อเขียนการดำเนินการของเราเอง การดำเนินการเหล่านั้นต้องทำงาน สอดคล้องกับเครื่องมือ C++ เช่น การส่งแฟล็กบรรทัดคำสั่ง C++ ไปยังเครื่องมือที่เรียกใช้คอมไพเลอร์ C++ เบื้องหลัง
กฎ C++ ใช้การสร้างบรรทัดคำสั่งในลักษณะพิเศษตามการกำหนดค่าฟีเจอร์ หากต้องการสร้างบรรทัดคำสั่ง คุณต้องมีสิ่งต่อไปนี้
features
และaction_configs
มาจากCcToolchainConfigInfo
และห่อหุ้มไว้ในCcToolchainInfo
FeatureConfiguration
- ส่งคืนโดย cc_common.configure_features- ตัวแปรการกำหนดค่า Toolchain ของ cc - ส่งคืนโดย cc_common.create_compile_variables หรือ cc_common.create_link_variables
แต่ก็ยังมีตัวรับค่าเฉพาะเครื่องมือ เช่น 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 เพื่อดูข้อมูล ล่าสุด