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

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

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

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

เนื่องจากมีการย้ายกฎ C++ อย่างต่อเนื่องไปยังแพลตฟอร์มและเครื่องมือเชน คุณควรใช้ฟังก์ชันผู้ช่วยที่มีอยู่ใน @bazel_tools//tools/cpp:toolchain_utils.bzl ซึ่งจะทําทั้ง 2 วิธีเมื่อมีการปิดใช้และเปิดใช้เครื่องมือเชน หากต้องการใช้งานเครื่องมือเชน 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++ ใช้วิธีการพิเศษในการสร้างบรรทัดคําสั่งโดยอิงตามการกําหนดค่าฟีเจอร์ ในการสร้างบรรทัดคําสั่ง คุณต้องมีสิ่งต่อไปนี้

แต่ก็ยังมี Getter เฉพาะเครื่องมือ เช่น คอมไพล์_executable ต้องการใช้ get_tool_for_action แทน เนื่องจากระบบจะนําเครื่องมือเฉพาะเครื่องมือออกในที่สุด

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

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

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

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

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

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

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