หน้านี้มีแหล่งข้อมูลที่จะช่วยคุณใช้ Bazel กับโปรเจ็กต์ C++ โดยจะลิงก์ไปยังบทแนะนำ กฎการสร้าง และข้อมูลอื่นๆ ที่เฉพาะเจาะจงสำหรับการสร้างโปรเจ็กต์ C++ ด้วย Bazel
การทำงานกับ Bazel
แหล่งข้อมูลต่อไปนี้จะช่วยคุณทำงานกับ Bazel ในโปรเจ็กต์ C++
- บทแนะนำ: การสร้างโปรเจ็กต์ C++
- Use Case ทั่วไปของ C++
- กฎ C/C++
- ไลบรารีที่จำเป็น
- การกำหนดค่า Toolchain ของ C++
- บทแนะนำ: การกำหนดค่า Toolchain ของ C++
- การผสานรวมกับกฎ C++
แนวทางปฏิบัติแนะนำ
นอกเหนือจากแนวทางปฏิบัติแนะนำทั่วไปของ Bazel แล้ว ด้านล่างนี้คือ แนวทางปฏิบัติแนะนำที่เฉพาะเจาะจงสำหรับโปรเจ็กต์ C++
ไฟล์ BUILD
ทำตามหลักเกณฑ์ด้านล่างเมื่อสร้างไฟล์ BUILD
ไฟล์
BUILDแต่ละไฟล์ควรมีเป้าหมายกฎcc_library1 รายการต่อหน่วยการคอมไพล์ในไดเรกทอรีคุณควรแบ่งไลบรารี C++ ออกเป็นส่วนย่อยๆ ให้มากที่สุดเพื่อเพิ่มส่วนเพิ่มและโหลดพร้อมกันการบิลด์
หากมีไฟล์ต้นฉบับไฟล์เดียวใน
srcsให้ตั้งชื่อไลบรารีให้เหมือนกับชื่อไฟล์ C++ นั้น ไลบรารีนี้ควรมีไฟล์ C++, ไฟล์ส่วนหัวที่ตรงกัน และทรัพยากร Dependency โดยตรงของไลบรารี เช่นcc_library( name = "mylib", srcs = ["mylib.cc"], hdrs = ["mylib.h"], deps = [":lower-level-lib"] )ใช้เป้าหมายกฎ
cc_test1 รายการต่อเป้าหมาย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++ ใช้เพื่อแยกวิเคราะห์ (แต่ไม่คอมไพล์) ไฟล์ส่วนหัวทั้งหมดในเป้าหมายที่สร้างขึ้นและทรัพยากร Dependency เมื่อใช้--process_headers_in_dependenciesFlag ซึ่งจะช่วยตรวจหาปัญหาในไลบรารีส่วนหัวเท่านั้น และตรวจสอบว่าส่วนหัวมีข้อมูลครบถ้วนและไม่ขึ้นอยู่กับลำดับที่รวม - ฟีเจอร์
layering_checkจะบังคับให้เป้าหมายรวมเฉพาะส่วนหัวที่ทรัพยากร Dependency โดยตรงให้มา Toolchain เริ่มต้นรองรับฟีเจอร์นี้ใน Linux โดยใช้clangเป็นคอมไพเลอร์