ส่วนก่อนหน้านี้ได้อธิบายเกี่ยวกับแพ็กเกจ เป้าหมายและป้ายกำกับ และ สร้างกราฟการอ้างอิงแบบนามธรรม ส่วนนี้จะอธิบายไวยากรณ์ที่เป็นรูปธรรม ที่ใช้กำหนดแพ็กเกจ
ตามคำจำกัดความแล้ว ทุกแพ็กเกจจะมีไฟล์ BUILD
ซึ่งเป็นไฟล์สั้นๆ
ของโปรแกรม BUILD
ไฟล์จะได้รับการประเมินโดยใช้ภาษาพิเศษ
Starlark
ซึ่งระบบจะตีความเป็นรายการคำสั่งตามลำดับ
โดยทั่วไปแล้ว ลำดับมีความสำคัญ กล่าวคือ ต้องกำหนดตัวแปรก่อนที่จะ
เป็นต้น แต่ไฟล์ BUILD
ส่วนใหญ่จะมีเพียงการประกาศ
ในการสร้างกฎ และลำดับที่เกี่ยวข้องของข้อความเหล่านี้ไม่ใช่สาระสำคัญ ทั้งหมด
สิ่งที่สำคัญคือกฎใดที่ประกาศ และด้วยค่าใด
การประเมินแพ็กเกจเวลาเสร็จสมบูรณ์
เมื่อมีการเรียกใช้ฟังก์ชันของกฎบิลด์ เช่น cc_library
ระบบจะสร้าง
เป้าหมายใหม่ในกราฟ สามารถอ้างอิงเป้าหมายนี้ในภายหลังโดยใช้ป้ายกำกับ
ในไฟล์ BUILD
แบบง่าย คุณจะเรียงลำดับการประกาศกฎใหม่ได้อย่างอิสระโดยไม่ต้อง
ที่เปลี่ยนลักษณะการทำงาน
ไฟล์ BUILD
ต้องไม่มีการแยกระหว่างโค้ดและข้อมูลอย่างชัดเจน
มีคำจำกัดความฟังก์ชัน คำสั่ง for
หรือคำสั่ง if
(แต่เป็นลิสต์
สามารถใช้ความเข้าใจและนิพจน์ if
ได้) สามารถประกาศฟังก์ชันได้ใน
.bzl
ไฟล์แทน นอกจากนี้ อาร์กิวเมนต์ *args
และ **kwargs
จะไม่
อนุญาตใน BUILD
ไฟล์ แต่ให้ระบุอาร์กิวเมนต์ทั้งหมดอย่างชัดเจน
พูดง่ายๆ ก็คือโปรแกรมใน Starlark ไม่สามารถทำ I/O ตามใจชอบได้ ค่าคงที่นี้
ทำให้การตีความไฟล์ BUILD
มีความสละสลวย ขึ้นอยู่กับไฟล์ที่รู้จักเท่านั้น
ชุดอินพุต ซึ่งจำเป็นต่อการตรวจสอบว่าบิลด์สามารถทำซ้ำได้
ดูรายละเอียดเพิ่มเติมได้ที่Hermeticity
ควรเขียนไฟล์ BUILD
โดยใช้เฉพาะอักขระ ASCII เท่านั้น
ในทางเทคนิคจะมีการแปลความหมายด้วยชุดอักขระละติน-1
เนื่องจากต้องอัปเดตไฟล์ BUILD
เมื่อใดก็ตามที่ทรัพยากร Dependency ขององค์ประกอบ
การเปลี่ยนแปลงโค้ดที่สำคัญ โค้ดเหล่านี้มักจะได้รับการดูแลโดยบุคคลหลายคนบน
ของทีม ผู้เขียนไฟล์ BUILD
คนควรแสดงความคิดเห็นอย่างเต็มที่เพื่อบันทึกบทบาทดังกล่าว
ในแต่ละเป้าหมายของบิลด์ ไม่ว่าจะมีจุดประสงค์เพื่อการใช้งานสาธารณะหรือไม่ และ
บันทึกบทบาทของแพ็กเกจนั้นๆ
กำลังโหลดส่วนขยาย
นามสกุล Bazel คือไฟล์ที่ลงท้ายด้วย .bzl
ใช้คำสั่ง load
เพื่อนำเข้า
สัญลักษณ์จากส่วนขยาย
load("//foo/bar:file.bzl", "some_library")
โค้ดนี้จะโหลดไฟล์ foo/bar/file.bzl
และเพิ่มสัญลักษณ์ some_library
สิ่งแวดล้อมได้ สามารถใช้โหลดกฎ ฟังก์ชัน หรือค่าคงที่ใหม่
(เช่น สตริงหรือรายการ) คุณสามารถนำเข้าสัญลักษณ์ได้หลายตัวโดยใช้
อาร์กิวเมนต์เพิ่มเติมสำหรับการเรียกไปยัง load
อาร์กิวเมนต์ต้องเป็นสัญพจน์ของสตริง
(ไม่มีตัวแปร) และคำสั่ง load
ต้องปรากฏที่ระดับบนสุด และไม่สามารถเป็น
ในเนื้อหาฟังก์ชัน
อาร์กิวเมนต์แรกของ load
คือป้ายกำกับที่ระบุ
.bzl
ไฟล์ หากเป็นป้ายกำกับที่เกี่ยวข้อง จะมีการแก้ไขตาม
แพ็กเกจ (ไม่ใช่ไดเรกทอรี) ที่มีไฟล์ bzl
ปัจจุบัน ป้ายกำกับสัมพัทธ์ใน
คำสั่ง load
ควรใช้ :
นำหน้า
load
ยังรองรับชื่อแทนด้วย คุณจึงสามารถกำหนดชื่ออื่นให้
สัญลักษณ์ที่นำเข้า
load("//foo/bar:file.bzl", library_alias = "some_library")
คุณสามารถกำหนดชื่อแทนได้หลายชื่อภายในคำสั่ง load
คำสั่งเดียว ยิ่งไปกว่านั้น
รายการอาร์กิวเมนต์สามารถมีทั้งชื่อแทนและชื่อสัญลักษณ์ปกติ ดังต่อไปนี้
เป็นตัวอย่างที่ถูกต้องตามกฎหมาย (โปรดทราบว่าควรใช้เครื่องหมายคำพูดเมื่อใด)
load(":my_rules.bzl", "some_rule", nice_alias = "some_other_rule")
ในไฟล์ .bzl
ระบบจะไม่ส่งออกสัญลักษณ์ที่ขึ้นต้นด้วย _
และไม่สามารถ
โหลดมาจากไฟล์อื่น
คุณสามารถใช้การแสดงการโหลดเพื่อจำกัด
ผู้ที่สามารถโหลดไฟล์ .bzl
ประเภทของกฎบิลด์
กฎการสร้างส่วนใหญ่มาจากกลุ่มครอบครัวและจัดกลุ่มตาม
ภาษา เช่น cc_binary
, cc_library
และ cc_test
คือกฎการสร้างสำหรับไบนารีของ C++
ไลบรารี และการทดสอบตามลำดับ ภาษาอื่นๆ ก็ใช้แบบเดียวกัน
รูปแบบการตั้งชื่อที่มีคำนำหน้าต่างกัน เช่น java_*
สำหรับ
Java ฟังก์ชันเหล่านี้บางส่วนมีการบันทึกไว้ใน
สร้างสารานุกรม แต่ก็เป็นไปได้
เพื่อให้ทุกคนสร้างกฎใหม่ได้
กฎ
*_binary
ข้อจะสร้างโปรแกรมปฏิบัติการในภาษาหนึ่งๆ หลังจาก ไฟล์ปฏิบัติการจะอยู่ในไบนารีของเครื่องมือบิลด์ ต้นไม้เอาต์พุตไว้ที่ชื่อที่เกี่ยวข้องสำหรับป้ายกำกับของกฎ เพื่อให้//my:program
ปรากฏที่$(BINDIR)/my/program
ในบางภาษา กฎดังกล่าวจะสร้างไดเรกทอรีรันไฟล์ด้วย ที่มีไฟล์ทั้งหมดที่กล่าวถึงใน
data
แอตทริบิวต์ที่เป็นของกฎ หรือกฎใดๆ ในทางอ้อม การปิดทรัพยากร Dependency ไฟล์ชุดนี้จะรวมอยู่ใน ที่เดียวเพื่อความสะดวกในการนำไปใช้งานจริงกฎ
*_test
ข้อเป็นความเชี่ยวชาญพิเศษของกฎ*_binary
ข้อที่ใช้สำหรับการทำงานอัตโนมัติ การทดสอบ การทดสอบเป็นเพียงโปรแกรมที่ประสบผลสำเร็จเป็นศูนย์เช่นเดียวกับไบนารี การทดสอบก็มีแผนผังรันไฟล์ (Runfile) และไฟล์ ด้านล่างเป็นไฟล์เดียวที่การทดสอบอาจเปิดอย่างถูกต้อง ขณะรันไทม์ ตัวอย่างเช่น โปรแกรม
cc_test(name='x', data=['//foo:bar'])
อาจเปิดและอ่าน$TEST_SRCDIR/workspace/foo/bar
ในระหว่างการดำเนินการ (ภาษาโปรแกรมแต่ละภาษามีฟังก์ชันยูทิลิตีของตนเองสำหรับ ที่เข้าถึงค่าของ$TEST_SRCDIR
แต่ทั้งหมด เทียบเท่ากับการใช้ตัวแปรสภาพแวดล้อมโดยตรง) การไม่ปฏิบัติตามกฎจะทำให้การทดสอบล้มเหลวเมื่อเป็นไปตาม ดำเนินการกับโฮสต์การทดสอบระยะไกลกฎ
*_library
ข้อระบุโมดูลที่คอมไพล์แยกกันใน ภาษาโปรแกรม ไลบรารีอาจขึ้นอยู่กับไลบรารีอื่นๆ และไบนารี และการทดสอบอาจขึ้นอยู่กับไลบรารี โดยมี ลักษณะการคอมไพล์แยกกัน
ป้ายกำกับ | การขึ้นต่อกัน |