Bazel สร้างซอฟต์แวร์จากซอร์สโค้ดที่จัดอยู่ในแผนผังไดเรกทอรีที่เรียกว่า
Google Workspace ได้อย่างเต็มประสิทธิภาพ ไฟล์ต้นฉบับในพื้นที่ทำงานมีการจัดระเบียบเป็นลำดับชั้นที่ซ้อนกันของ
โดยที่แพ็กเกจแต่ละรายการคือไดเรกทอรีที่มีชุดของ
ไฟล์ต้นฉบับและไฟล์ BUILD
อย่างละ 1 ไฟล์ ไฟล์ BUILD
ระบุว่าซอฟต์แวร์ใด
สามารถสร้างเอาต์พุตได้จากต้นทาง
Workspace
workspace คือโครงสร้างไดเรกทอรีในระบบไฟล์ที่มีต้นทาง
สำหรับซอฟต์แวร์ที่คุณต้องการสร้าง แต่ละพื้นที่ทำงานมีไฟล์ข้อความชื่อ
WORKSPACE
ซึ่งอาจว่างเปล่า หรืออาจมีการอ้างอิงถึงภายนอก
ทรัพยากร Dependency ที่จำเป็นเพื่อสร้างเอาต์พุต
ไดเรกทอรีที่มีไฟล์ชื่อ WORKSPACE
จะถือว่าเป็นรูทของไฟล์
Google Workspace ได้อย่างเต็มประสิทธิภาพ ดังนั้น Bazel จะไม่สนใจต้นไม้ไดเรกทอรีใดๆ ในพื้นที่ทำงานที่รูทที่
ไดเรกทอรีย่อยที่มีไฟล์ WORKSPACE
เนื่องจากประกอบขึ้นเป็นพื้นที่ทำงานอื่น
นอกจากนี้ Bazel ยังรองรับไฟล์ WORKSPACE.bazel
เป็นชื่อแทนของไฟล์ WORKSPACE
อีกด้วย ถ้า
มีทั้ง 2 ไฟล์ โดยใช้ WORKSPACE.bazel
ที่เก็บ
โค้ดจะจัดระเบียบอยู่ในที่เก็บ ไดเรกทอรีที่มี WORKSPACE
คือรากของที่เก็บหลัก หรือที่เรียกอีกอย่างว่า @
อื่นๆ (ภายนอก)
มีการกำหนดที่เก็บในไฟล์ WORKSPACE
โดยใช้กฎพื้นที่ทำงาน หรือ
ที่สร้างขึ้นจากโมดูลและส่วนขยายในระบบ Bzlmod ดูภายนอก
ภาพรวมทรัพยากร Dependency สำหรับข้อมูลเพิ่มเติม
กฎพื้นที่ทำงานที่มาพร้อมกับ Bazel จะได้รับการจัดทำบันทึกไว้ในพื้นที่ทำงาน กฎในบิลด์ สารานุกรมและเอกสารเกี่ยวกับการฝัง กฎของที่เก็บ Starlark
เนื่องจากที่เก็บภายนอกเป็นที่เก็บในตัวเอง จึงมักจะมี
WORKSPACE
ไฟล์ด้วย แต่ WORKSPACE
ไฟล์เพิ่มเติมเหล่านี้
ละเว้นโดย Bazel โดยเฉพาะอย่างยิ่ง ที่เก็บที่ขึ้นอยู่กับทรานซิทีฟจะไม่
โดยอัตโนมัติ
แพ็กเกจ
หน่วยหลักของการจัดระเบียบโค้ดในที่เก็บคือแพ็กเกจ ต แพ็กเกจคือคอลเล็กชันของไฟล์ที่เกี่ยวข้อง และข้อกำหนดวิธีการ ซึ่งใช้ในการสร้างอาร์ติแฟกต์เอาต์พุต
แพ็กเกจได้รับการระบุเป็นไดเรกทอรีที่มี
ไฟล์ 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
เอกสารประกอบ