หน้านี้จะอธิบายวิธีผสานรวมกับกฎ C++ ในระดับต่างๆ
การเข้าถึงเชนเครื่องมือ C++
เนื่องจากการย้ายข้อมูลกฎ C++ อย่างต่อเนื่องไปยังแพลตฟอร์มและ toolchains คุณจึงควรใช้ฟังก์ชันตัวช่วยที่มีให้บริการที่ @bazel_tools//tools/cpp:toolchain_utils.bzl ซึ่งทำงานทั้งในกรณีที่ปิดใช้หรือเปิด Toolchain หากต้องการใช้เครื่องมือ C++ ในกฎ ให้เพิ่มแอตทริบิวต์ Label
ที่ชื่อว่า _cc_toolchain
แล้วชี้ไปที่ @bazel_tools//tools/cpp:current_cc_toolchain
(อินสแตนซ์ของกฎ cc_toolchain_alias
ที่ชี้ไปยังชุดเครื่องมือ C++ ที่เลือกในปัจจุบัน)
จากนั้นเมื่อใช้งานกฎ ให้ใช้ find_cpp_toolchain(ctx)
เพื่อรับ CcToolchainInfo
ดูตัวอย่างที่ใช้งานได้ที่สมบูรณ์ได้ในตัวอย่าง rules_cc
การสร้างบรรทัดคำสั่งและตัวแปรสภาพแวดล้อมโดยใช้เชนเครื่องมือ C++
โดยปกติแล้ว คุณจะผสานรวมกับชุดเครื่องมือ C++ เพื่อให้มีแฟล็กบรรทัดคำสั่งเหมือนกับกฎ C++ แต่จะใช้การดำเนินการ C++ โดยตรงไม่ได้ เพราะเมื่อเขียนการดำเนินการของเราเอง การทำงานจะต้อง สอดคล้องกับชุดเครื่องมือ C++ เช่น การส่งแฟล็กบรรทัดคำสั่ง C++ ไปยังเครื่องมือที่เรียกใช้คอมไพเลอร์ C++ ในเบื้องหลัง
กฎ C++ ใช้วิธีพิเศษในการสร้างบรรทัดคำสั่งตามการกำหนดค่าฟีเจอร์ คุณต้องมีสิ่งต่อไปนี้เพื่อสร้างบรรทัดคำสั่ง
features
และaction_configs
- ค่าเหล่านี้มาจากCcToolchainConfigInfo
และรวมอยู่ในCcToolchainInfo
FeatureConfiguration
- ส่งคืนโดย cc_common.configure_features- CC ตัวแปรการกำหนดค่า Toolchain - แสดงผลโดย cc_common.create_compile_variables หรือ cc_common.create_link_variables
แต่ยังมี Getter เฉพาะเครื่องมือ เช่น 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
ต้องการเผยแพร่ทรัพยากร Dependency แบบเนทีฟจนถึง java_binary
ก็ไม่ควรระบุ CcInfo
โดยตรง (cc_binary
ขึ้นอยู่กับ java_library
ไม่เหมาะสม) และควรรวมระเบียนภายใน เช่น JavaCcInfo
ดูตัวอย่างที่ใช้งานได้ที่สมบูรณ์ได้ในตัวอย่าง rules_cc
การใช้ตรรกะและการดำเนินการของกฎ C++ ซ้ำ
ยังไม่เสถียร ส่วนนี้จะอัปเดตเมื่อ API เสถียรแล้ว ติดตาม #4570 เพื่อรับข้อมูลล่าสุด