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

รายงานปัญหา ดูแหล่งที่มา

หน้านี้อธิบายวิธีผสานรวมกับกฎ C++ ในระดับต่างๆ

การเข้าถึงเครื่องมือเชน C++

เนื่องจากมีการย้ายข้อมูลกฎ C++ อย่างต่อเนื่องไปยังแพลตฟอร์มและtoolchain คุณจึงควรใช้ฟังก์ชันตัวช่วยที่มีให้ที่ @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

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

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

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

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

ดูตัวอย่างการทำงานที่สมบูรณ์ได้ในตัวอย่าง 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 เพื่อดูข้อมูลล่าสุด