หน้านี้จะอธิบายวิธีผสานรวมกับกฎ C++ ในระดับต่างๆ
การเข้าถึงชุดเครื่องมือ C++
เนื่องจากมีการย้ายข้อมูลกฎ C++ อย่างต่อเนื่อง ไปที่แพลตฟอร์มและชุดเครื่องมือ คุณจึงควรใช้ฟังก์ชันตัวช่วยที่มีอยู่ใน @bazel_tools//tools/cpp:toolchain_utils.bzl ซึ่งใช้งานได้ทั้งเมื่อเปิดใช้และปิดใช้ชุดเครื่องมือ หากต้องการใช้ชุดเครื่องมือ C++ ในกฎ ให้เพิ่มแอตทริบิวต์ Label
ที่มีชื่อว่า _cc_toolchain
และชี้ไปที่ @bazel_tools//tools/cpp:current_cc_toolchain
(อินสแตนซ์ของกฎ cc_toolchain_alias
ที่ชี้ไปยังชุดเครื่องมือ C++ ที่เลือกอยู่ในปัจจุบัน)
จากนั้นในการใช้งานกฎ ให้ใช้ find_cpp_toolchain(ctx)
เพื่อรับ CcToolchainInfo
ดูตัวอย่างที่ใช้งานได้อย่างสมบูรณ์ได้ในตัวอย่าง rules_cc
การสร้างบรรทัดคำสั่งและตัวแปรสภาพแวดล้อมโดยใช้ชุดเครื่องมือ C++
โดยทั่วไป คุณควรผสานรวมกับเครื่องมือทางเทคนิค C++ เพื่อให้มี Flag บรรทัดคำสั่งเหมือนกับกฎ C++ แต่ไม่ต้องการใช้การดำเนินการ C++ โดยตรง เนื่องจากเมื่อเขียนการดำเนินการของเราเอง การดำเนินการต้องทำงานอย่างสอดคล้องกันกับชุดเครื่องมือ C++ เช่น การส่ง Flag บรรทัดคำสั่ง 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
แต่ยังคงมี Geter สำหรับเครื่องมือเฉพาะ เช่น compiler_executable
โปรดใช้ get_tool_for_action
แทน เนื่องจากเราจะนําตัวรับเฉพาะเครื่องมือออกในที่สุด
ดูตัวอย่างที่ใช้งานได้อย่างสมบูรณ์ได้ในตัวอย่าง rules_cc
การใช้กฎ Starlark ที่ขึ้นอยู่กับกฎ C++ และ/หรือกฎ C++ ที่สามารถใช้
กฎ C++ ส่วนใหญ่จะมี CcInfo
, ผู้ให้บริการที่มี CompilationContext
และ LinkingContext
ซึ่งจะช่วยให้เข้าถึงข้อมูลต่างๆ ได้ เช่น ส่วนหัวแบบทรานซิทีฟทั้งหมดหรือไลบรารีที่จะลิงก์ กฎ Starlark ที่กําหนดเองจาก CcInfo
และ CcToolchainInfo
ควรได้รับข้อมูลทั้งหมดที่ต้องการ
หากกฎ Starlark ที่กําหนดเองระบุ CcInfo
จะเป็นสัญญาณให้กฎ C++ รู้ว่ากฎดังกล่าวสามารถใช้ CcInfo
ได้ด้วย อย่างไรก็ตาม โปรดระมัดระวัง หากต้องการเผยแพร่
CcInfo
ผ่านกราฟไปยังกฎไบนารีที่จะใช้ โปรดรวม
CcInfo
ในผู้ให้บริการรายอื่น ตัวอย่างเช่น หากกฎ java_library
ต้องการเผยแพร่การพึ่งพาแบบเนทีฟไปยัง java_binary
ก็ไม่ควรระบุ CcInfo
โดยตรง (cc_binary
ขึ้นอยู่กับ java_library
นั้นไม่สมเหตุสมผล) แต่ควรรวมไว้ใน JavaCcInfo
เป็นต้น
ดูตัวอย่างที่ใช้งานได้อย่างสมบูรณ์ได้ในตัวอย่าง rules_cc
การใช้ตรรกะและการดําเนินการของกฎ C++ ซ้ำ
ยังไม่เสถียร ส่วนนี้จะอัปเดตเมื่อ API เสถียร ติดตาม #4570 เพื่อดูข้อมูลอัปเดต