Bazel สร้างซอฟต์แวร์จากซอร์สโค้ดที่จัดอยู่ในไดเรกทอรีต้นไม้ที่เรียกว่า
ที่เก็บได้ ชุดที่เก็บที่กำหนดประกอบด้วยพื้นที่ทำงาน แหล่งที่มา
ไฟล์ในที่เก็บมีการจัดระเบียบเป็นลำดับชั้นของแพ็กเกจที่ซ้อนกันอยู่โดยที่
แพ็กเกจแต่ละแพ็กเกจจะเป็นไดเรกทอรีที่มีชุดของไฟล์แหล่งข้อมูลที่เกี่ยวข้องและ
BUILD
ไฟล์ ไฟล์ BUILD
ระบุว่าเอาต์พุตซอฟต์แวร์ใดที่สร้างขึ้นได้
แหล่งที่มา
ที่เก็บ
ไฟล์ต้นฉบับที่ใช้ในบิลด์ Bazel จะได้รับการจัดระเบียบในที่เก็บ (มัก
ให้สั้นลงเหลือเพียงที่เก็บ) ที่เก็บคือโครงสร้างไดเรกทอรีที่มีไฟล์ตัวทำเครื่องหมายขอบเขตอยู่ที่
ราก ไฟล์ตัวทำเครื่องหมายขอบเขตดังกล่าวอาจเป็น MODULE.bazel
, REPO.bazel
หรือ
ในบริบทเดิม WORKSPACE
หรือ WORKSPACE.bazel
ที่เก็บที่มีการเรียกใช้คำสั่ง Bazel ปัจจุบันจะเรียกว่า main ที่เก็บ ส่วนอื่น ที่เก็บ (ภายนอก) จะกำหนดโดยกฎของที่เก็บ ดู ภายนอก ดูภาพรวมทรัพยากร Dependency เพื่อดูข้อมูลเพิ่มเติม
Workspace
พื้นที่ทำงานคือสภาพแวดล้อมที่คำสั่ง Bazel ทั้งหมดใช้ร่วมกัน ที่เก็บหลัก ซึ่งรวมที่เก็บหลักและชุดของที่เก็บภายนอกที่กำหนดทั้งหมด ที่เก็บ
โปรดทราบว่าที่ผ่านมา แนวคิดเรื่อง "ที่เก็บ" และ "พื้นที่ทำงาน" คือ ประชุมกัน; คำว่า "พื้นที่ทำงาน" มักใช้เพื่ออ้างอิงถึง และบางครั้งอาจนำไปใช้เป็นคำพ้องความหมายของ "repository"
แพ็กเกจ
หน่วยหลักของการจัดระเบียบโค้ดในที่เก็บคือแพ็กเกจ ต แพ็กเกจคือคอลเล็กชันของไฟล์ที่เกี่ยวข้อง และข้อกำหนดวิธีการ ซึ่งใช้ในการสร้างอาร์ติแฟกต์เอาต์พุต
แพ็กเกจได้รับการระบุเป็นไดเรกทอรีที่มี
ไฟล์ BUILD
ตั้งชื่อเป็น BUILD
หรือ BUILD.bazel
ต
แพ็กเกจจะมีไฟล์ทั้งหมดในไดเรกทอรี และไดเรกทอรีย่อยทั้งหมดที่อยู่ภายใต้
ยกเว้นไฟล์ที่มีไฟล์ BUILD
จากคําจํากัดความนี้ ไม่มี
ไฟล์หรือไดเรกทอรีอาจเป็นส่วนหนึ่งของแพ็กเกจ 2 แพ็กเกจที่แตกต่างกัน
ตัวอย่างเช่น ในโครงสร้างไดเรกทอรีต่อไปนี้มี 2 แพ็กเกจ คือ my/app
และแพ็กเกจย่อย my/app/tests
โปรดทราบว่า my/app/data
ไม่ใช่แพ็กเกจ แต่
ไดเรกทอรีที่เป็นของแพ็กเกจ my/app
src/my/app/BUILD
src/my/app/app.cc
src/my/app/data/input.txt
src/my/app/tests/BUILD
src/my/app/tests/test.cc
เป้าหมาย
แพ็กเกจคือคอนเทนเนอร์ของเป้าหมาย ซึ่งระบุไว้ในแท็ก
BUILD
ไฟล์ เป้าหมายส่วนใหญ่จะเป็น 1 ใน 2 ประเภทหลัก ได้แก่ ไฟล์และกฎ
ไฟล์จะถูกแบ่งออกเป็น 2 ประเภท ไฟล์ต้นฉบับมักจะเขียนโดย ของผู้คน และเช็คอินในที่เก็บแล้ว ไฟล์ที่สร้างขึ้น ซึ่งบางครั้งเรียกว่า ไฟล์ที่ได้รับมาหรือไฟล์เอาต์พุต จะไม่มีการตรวจสอบ แต่ ที่สร้างขึ้นจากไฟล์ต้นฉบับ
เป้าหมายประเภทที่ 2 จะประกาศด้วยกฎ อินสแตนซ์ของกฎแต่ละรายการ จะระบุความสัมพันธ์ระหว่างชุดอินพุตและชุดของไฟล์เอาต์พุต อินพุตของกฎอาจเป็นไฟล์ต้นฉบับ แต่ก็อาจเป็นเอาต์พุตของ กฎ
ไม่ว่าอินพุตของกฎจะเป็นไฟล์ต้นฉบับหรือไฟล์ที่สร้างขึ้น ข้อมูลที่ไม่มีสาระสำคัญ สิ่งสำคัญคือเนื้อหาของไฟล์นั้นเท่านั้น ข้อเท็จจริงนี้ ช่วยให้สามารถแทนที่ไฟล์ต้นฉบับที่ซับซ้อนด้วยไฟล์ที่สร้างขึ้นจาก เช่น เกิดขึ้นเมื่อมีภาระในการดูแลรักษา ไฟล์ที่มีโครงสร้างจะดูน่าเบื่อเกินไป และมีคนเขียนโปรแกรมเพื่อดึงข้อมูลขึ้นมา และไม่จำเป็นต้องทำการเปลี่ยนแปลงใดๆ กับผู้ใช้ไฟล์นั้น ในทางกลับกัน ตัวกรองที่สร้างขึ้น อาจถูกแทนที่ด้วยไฟล์ต้นฉบับที่มีเพียงการเปลี่ยนแปลงในเครื่องเท่านั้น
ข้อมูลที่ป้อนลงในกฎอาจรวมถึงกฎอื่นๆ ด้วย ความหมายที่ชัดเจนของ ของความสัมพันธ์มักค่อนข้างซับซ้อน และขึ้นอยู่กับภาษาหรือกฎ แต่ สามารถใช้งานได้ง่าย กฎไลบรารี C++ อาจมีไลบรารี C++ อีกรายการ กฎ B สำหรับอินพุต ผลกระทบของทรัพยากร Dependency นี้ คือ ไฟล์ส่วนหัวของ B จะ ใช้ได้กับ A ในระหว่างการคอมไพล์ สัญลักษณ์ของ B จะปรากฏสำหรับ A ในระหว่าง และข้อมูลรันไทม์ของ B จะพร้อมใช้งานสำหรับ A ระหว่างการดำเนินการ
กฎทั้งหมดมีความแปรผันคือ ไฟล์ที่สร้างโดยกฎจะเป็นของ แพ็กเกจเดียวกันกับกฎ ไม่สามารถสร้างไฟล์ลงใน แพ็กเกจอื่น โดยทั่วไปแล้วอินพุตของกฎจะมาจากที่อื่น อย่างไร
กลุ่มแพ็กเกจคือชุดของแพ็กเกจที่มีวัตถุประสงค์เพื่อจำกัดความสามารถในการเข้าถึง
กฎบางอย่างได้ กลุ่มแพ็กเกจจะกำหนดโดยฟังก์ชัน package_group
โฆษณาเหล่านี้
มีพร็อพเพอร์ตี้ 3 รายการ ได้แก่ รายการแพ็กเกจที่มีอยู่ ชื่อ และรายการอื่นๆ
กลุ่มแพ็กเกจที่รวมอยู่ วิธีเดียวที่อนุญาตให้ใช้อ้างอิงคือจาก
แอตทริบิวต์ visibility
ของกฎ หรือจากแอตทริบิวต์ default_visibility
ของ
ฟังก์ชัน package
จะไม่สร้างหรือใช้ไฟล์ สำหรับข้อมูลเพิ่มเติม
โปรดดูรายละเอียดที่ package_group
เอกสารประกอบ