C++ และ Bazel

รายงานปัญหา ดูแหล่งที่มา /3} /4} {3/4} {3/4} {3/4} {3/4} /4.

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

การทำงานกับ Bazel

แหล่งข้อมูลต่อไปนี้จะช่วยคุณในการทำงานกับ Bazel ในโปรเจ็กต์ C++

แนวทางปฏิบัติแนะนำ

นอกเหนือจากแนวทางปฏิบัติแนะนำทั่วไปของ Bazel แล้ว ด้านล่างคือแนวทางปฏิบัติแนะนำสำหรับโปรเจ็กต์ C++ โดยเฉพาะ

สร้างไฟล์

ทำตามหลักเกณฑ์ด้านล่างเมื่อสร้างไฟล์ BUILD

  • ไฟล์ BUILD แต่ละไฟล์ควรมีเป้าหมายกฎ cc_library 1 รายการต่อหน่วยการคอมไพล์ในไดเรกทอรี

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

  • หากมีไฟล์ต้นฉบับไฟล์เดียวใน srcs ให้ตั้งชื่อไลบรารีเหมือนกับชื่อไฟล์ C++ นั้น ไลบรารีนี้ควรมีไฟล์ C++ ไฟล์ส่วนหัวที่ตรงกัน และทรัพยากร Dependency โดยตรงของไลบรารี เช่น

    cc_library(
        name = "mylib",
        srcs = ["mylib.cc"],
        hdrs = ["mylib.h"],
        deps = [":lower-level-lib"]
    )
    
  • ใช้เป้าหมายกฎ cc_test 1 รายการต่อเป้าหมาย 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