หน้านี้มีแหล่งข้อมูลที่จะช่วยให้คุณใช้ Bazel กับโปรเจ็กต์ C++ ได้ โดยจะลิงก์ ไปยังบทแนะนำ กฎการสร้าง และข้อมูลอื่นๆ ที่เฉพาะเจาะจงสำหรับการสร้างโปรเจ็กต์ C++ ด้วย Bazel
การทำงานกับ Bazel
แหล่งข้อมูลต่อไปนี้จะช่วยให้คุณทำงานกับ Bazel ในโปรเจ็กต์ C++ ได้
- บทแนะนำ: สร้างโปรเจ็กต์ C++
- Use Case ทั่วไปของ C++
- กฎ C/C++
- ไลบรารีที่จำเป็น
- การกำหนดค่าชุดเครื่องมือ C++
- บทแนะนำ: การกำหนดค่า Toolchain ของ C++
- การผสานรวมกับกฎ C++
แนวทางปฏิบัติแนะนำ
นอกจากแนวทางปฏิบัติแนะนำทั่วไปของ Bazel แล้ว ด้านล่างนี้คือแนวทางปฏิบัติแนะนำสำหรับโปรเจ็กต์ C++ โดยเฉพาะ
ไฟล์ BUILD
ปฏิบัติตามหลักเกณฑ์ด้านล่างเมื่อสร้างไฟล์ BUILD
- ไฟล์ - BUILDแต่ละไฟล์ควรมีเป้าหมายกฎ- cc_library1 รายการต่อหน่วยการคอมไพล์ในไดเรกทอรี
- คุณควรแบ่งไลบรารี C++ ออกเป็นส่วนย่อยๆ ให้มากที่สุด เพื่อเพิ่มการวัดผลที่เพิ่มขึ้นและสร้างแบบคู่ขนาน 
- หากมีไฟล์ต้นฉบับไฟล์เดียวใน - srcsให้ตั้งชื่อไลบรารีให้เหมือนกับชื่อของไฟล์ C++ นั้น ไลบรารีนี้ควรมีไฟล์ C++ ไฟล์ส่วนหัวที่ตรงกัน และการอ้างอิงโดยตรงของไลบรารี เช่น- cc_library( name = "mylib", srcs = ["mylib.cc"], hdrs = ["mylib.h"], deps = [":lower-level-lib"] )
- ใช้เป้าหมายกฎ 1 รายการต่อเป้าหมาย 1 รายการในไฟล์ - cc_test- cc_libraryตั้งชื่อ- [library-name]_testเป้าหมาย- [library-name]_test.ccและไฟล์ต้นฉบับ เช่น เป้าหมายการทดสอบสำหรับเป้าหมายไลบรารี- mylibที่แสดงด้านบนจะมีลักษณะดังนี้- cc_test( name = "mylib_test", srcs = ["mylib_test.cc"], deps = [":mylib"] )
รวมเส้นทาง
ทำตามหลักเกณฑ์ต่อไปนี้สำหรับเส้นทางรวม
- กำหนดเส้นทางรวมทั้งหมดให้สัมพันธ์กับไดเรกทอรีพื้นที่ทำงาน 
- ใช้การรวมที่อยู่ในเครื่องหมายคำพูด ( - #include "foo/bar/baz.h") สำหรับส่วนหัวที่ไม่ใช่ของระบบ ไม่ใช่ วงเล็บเหลี่ยม (- #include <foo/bar/baz.h>)
- หลีกเลี่ยงการใช้ทางลัดไดเรกทอรี UNIX เช่น - .(ไดเรกทอรีปัจจุบัน) หรือ- ..(ไดเรกทอรีระดับบน)
- สำหรับโค้ดเดิมหรือ - third_partyที่ต้องมีการรวมที่ชี้ไปภายนอกที่เก็บโปรเจ็กต์ เช่น การรวมที่เก็บภายนอกที่ต้องมีคำนำหน้า ให้ใช้อาร์กิวเมนต์- include_prefixและ- strip_include_prefixในเป้าหมายกฎ- cc_library
ฟีเจอร์ของ Toolchain
ฟีเจอร์เสริมต่อไปนี้
จะช่วยปรับปรุงความสะอาดของโปรเจ็กต์ C++ ได้ คุณเปิดใช้ได้โดยใช้
--features Flag บรรทัดคำสั่งหรือแอตทริบิวต์ features ของ
repo
package หรือกฎ cc_*
- parse_headersฟีเจอร์นี้จะทำให้คอมไพเลอร์ C++ ใช้ในการแยกวิเคราะห์ (แต่ไม่ได้คอมไพล์) ไฟล์ส่วนหัวทั้งหมดในเป้าหมายที่สร้างขึ้นและการขึ้นต่อกัน เมื่อใช้แฟล็ก- --process_headers_in_dependenciesซึ่งจะช่วยตรวจหาปัญหาในไลบรารีที่มีเฉพาะส่วนหัว และตรวจสอบว่าส่วนหัว มีข้อมูลครบถ้วนและไม่ขึ้นอยู่กับลำดับการรวม
- ฟีเจอร์ layering_checkจะบังคับให้เป้าหมายมีเฉพาะส่วนหัว ที่จัดทำโดยทรัพยากร Dependency โดยตรง Toolchain เริ่มต้นรองรับฟีเจอร์นี้ใน Linux โดยใช้clangเป็นคอมไพเลอร์