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

รายงานปัญหา ดูแหล่งที่มา ตอนกลางคืน · 7.3 · 7.2 · 7.1 · 7.0 · 6.5

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 เอกสารประกอบ

ป้ายกำกับ