การผสานรวมกับกฎ C++

7.3 · 7.2 · 7.1 · 7.0 · 6.5

หน้านี้จะอธิบายวิธีผสานรวมกับกฎ 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 examples

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

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

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

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

ดูตัวอย่างการทำงานที่สมบูรณ์ได้ใน rules_cc examples

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

กฎ C++ ส่วนใหญ่จะมี CcInfo, ผู้ให้บริการที่มี CompilationContext และ LinkingContext วิธีนี้ช่วยให้คุณเข้าถึงข้อมูลต่างๆ เช่น ส่วนหัวทรานซิชันหรือไลบรารีที่จะลิงก์ได้ทั้งหมด กฎ Starlark ที่กําหนดเองจาก CcInfo และ CcToolchainInfo ควรได้รับข้อมูลทั้งหมดที่ต้องการ

หากกฎ Starlark ที่กำหนดเองระบุ CcInfo จะเป็นการส่งสัญญาณไปยังกฎ C++ ว่ากฎดังกล่าวอ้างอิงกฎนี้ได้ด้วยเช่นกัน อย่างไรก็ตาม โปรดระมัดระวัง หากต้องการเผยแพร่ CcInfo ผ่านกราฟไปยังกฎไบนารีที่จะใช้ โปรดรวม CcInfo ในผู้ให้บริการรายอื่น ตัวอย่างเช่น หากกฎ java_library ต้องการเผยแพร่การพึ่งพาแบบเนทีฟไปยัง java_binary ก็ไม่ควรระบุ CcInfo โดยตรง (cc_binary ขึ้นอยู่กับ java_library นั้นไม่สมเหตุสมผล) แต่ควรรวมไว้ใน JavaCcInfo เป็นต้น

ดูตัวอย่างการทำงานที่สมบูรณ์ได้ในตัวอย่าง rules_cc

การใช้ตรรกะและการทำงานของกฎ C++ ซ้ำ

ยังไม่เสถียร ส่วนนี้จะอัปเดตเมื่อ API เสถียร ติดตาม #4570 เพื่อดูข้อมูลอัปเดต