ที่เก็บ พื้นที่ทำงาน แพ็กเกจ และเป้าหมาย

รายงานปัญหา ดูแหล่งที่มา

Bazel สร้างซอฟต์แวร์จากซอร์สโค้ดที่จัดอยู่ในแผนผังไดเรกทอรีที่เรียกว่าที่เก็บ ชุดที่เก็บที่กำหนดจะประกอบด้วยพื้นที่ทำงาน ไฟล์ต้นทางในที่เก็บจะจัดระเบียบตามลำดับชั้นของแพ็กเกจแบบซ้อนกัน โดยแต่ละแพ็กเกจคือไดเรกทอรีที่มีชุดไฟล์แหล่งที่มาที่เกี่ยวข้องและไฟล์ BUILD 1 ไฟล์ ไฟล์ BUILD จะระบุเอาต์พุตของซอฟต์แวร์ที่สามารถสร้างจากต้นทางได้

ที่เก็บ

ไฟล์ต้นฉบับที่ใช้ในบิลด์ Bazel จะได้รับการจัดระเบียบในที่เก็บ (มักจะย่อเป็นที่เก็บ) ที่เก็บคือแผนผังไดเรกทอรีที่มีไฟล์ตัวทำเครื่องหมายขอบเขตอยู่ที่ราก ไฟล์ตัวทำเครื่องหมายขอบเขตดังกล่าวอาจเป็น MODULE.bazel, REPO.bazel หรือในบริบทเดิม, WORKSPACE หรือ WORKSPACE.bazel

ที่เก็บที่เรียกใช้คำสั่ง Bazel ปัจจุบันเรียกว่าที่เก็บหลัก ส่วนที่เก็บ (ภายนอก) อื่นๆ จะกำหนดตามกฎที่เก็บ ดูข้อมูลเพิ่มเติมได้ที่ภาพรวมการพึ่งพาภายนอก

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

เป้าหมาย

แพ็กเกจคือคอนเทนเนอร์ของ targets ซึ่งกำหนดไว้ในไฟล์ BUILD ของแพ็กเกจ เป้าหมายส่วนใหญ่เป็น 1 ใน 2 ประเภทหลัก ได้แก่ ไฟล์และกฎ

ไฟล์จะแบ่งออกเป็น 2 ประเภทเพิ่มเติม ไฟล์ต้นฉบับมักจะเขียนขึ้นด้วยความพยายามของผู้คน และเช็คอินในที่เก็บแล้ว ไฟล์ที่สร้างซึ่งบางครั้งเรียกว่าไฟล์ที่ได้รับมาหรือไฟล์เอาต์พุตจะไม่ได้รับการเช็คอิน แต่จะสร้างขึ้นจากไฟล์ต้นฉบับ

เป้าหมายประเภทที่ 2 จะได้รับการประกาศด้วยกฎ อินสแตนซ์ของกฎแต่ละรายการจะระบุความสัมพันธ์ระหว่างชุดอินพุตและชุดไฟล์เอาต์พุต อินพุตของกฎอาจเป็นไฟล์ต้นฉบับ แต่ก็อาจเป็นเอาต์พุตของกฎอื่นๆ ด้วย

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

อินพุตของกฎอาจรวมกฎอื่นๆ ด้วย ความหมายที่ชัดเจนของความสัมพันธ์ดังกล่าวมักจะค่อนข้างซับซ้อนและขึ้นอยู่กับภาษาหรือกฎ แต่โดยธรรมชาติแล้ว กฎเกณฑ์ A ของไลบรารี C++ อาจมีกฎ C++ อีกกฎหนึ่งสำหรับอินพุต ผลลัพธ์ของทรัพยากร Dependency นี้คือไฟล์ส่วนหัวของ B จะใช้ได้กับ A ระหว่างการคอมไพล์ สัญลักษณ์ของ B จะพร้อมใช้งานกับ A ในระหว่างการลิงก์ และข้อมูลรันไทม์ของ B จะพร้อมใช้งานกับ A ระหว่างการดำเนินการ

ความไม่คงที่ของกฎทั้งหมดคือไฟล์ที่กฎสร้างขึ้นจะเป็นของแพ็กเกจเดียวกับกฎนั้นเสมอ โดยจะสร้างไฟล์ลงในแพ็กเกจอื่นไม่ได้ อย่างไรก็ตาม ถือเป็นเรื่องปกติที่อินพุตของกฎจะมาจากแพ็กเกจอื่น

กลุ่มแพ็กเกจคือชุดของแพ็กเกจที่มีวัตถุประสงค์เพื่อจำกัดการช่วยเหลือพิเศษของกฎบางข้อ ฟังก์ชัน package_group จะเป็นผู้กำหนดกลุ่มแพ็กเกจ โดยมีพร็อพเพอร์ตี้ 3 ประเภท ได้แก่ รายการแพ็กเกจที่มี ชื่อ และกลุ่มแพ็กเกจอื่นๆ ที่มี โดยวิธีที่อนุญาตมีเพียงวิธีเดียวที่จะกล่าวถึงแอตทริบิวต์เหล่านี้คือจากแอตทริบิวต์ visibility ของกฎหรือจากแอตทริบิวต์ default_visibility ของฟังก์ชัน package โดยจะไม่สร้างหรือใช้ไฟล์ ดูข้อมูลเพิ่มเติมได้ในเอกสารประกอบ package_group

ป้ายกำกับ