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

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

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

Workspace

workspace คือโครงสร้างไดเรกทอรีในระบบไฟล์ที่มีต้นทาง สำหรับซอฟต์แวร์ที่คุณต้องการสร้าง แต่ละพื้นที่ทำงานมีไฟล์ข้อความชื่อ WORKSPACE ซึ่งอาจว่างเปล่า หรืออาจประกอบด้วยการอ้างอิงไปยัง ต้องใช้ทรัพยากร Dependency ภายนอกเพื่อสร้างเอาต์พุต

ไดเรกทอรีที่มีไฟล์ชื่อ WORKSPACE จะถือว่าเป็นรูทของไฟล์ Google Workspace ได้อย่างเต็มประสิทธิภาพ ดังนั้น Bazel จะไม่สนใจต้นไม้ไดเรกทอรีใดๆ ในพื้นที่ทำงานที่รูท ที่ไดเรกทอรีย่อยที่มีไฟล์ WORKSPACE เนื่องจากสร้างพื้นที่ทำงานอื่น

นอกจากนี้ Bazel ยังรองรับไฟล์ WORKSPACE.bazel เป็นชื่อแทนของไฟล์ WORKSPACE อีกด้วย หากมีทั้ง 2 ไฟล์ ระบบจะใช้ WORKSPACE.bazel

ที่เก็บ

โค้ดจะจัดระเบียบอยู่ในที่เก็บ ไดเรกทอรีที่มี WORKSPACE คือรากของที่เก็บหลัก หรือที่เรียกอีกอย่างว่า @ อื่นๆ (ภายนอก) มีการกำหนดที่เก็บในไฟล์ WORKSPACE โดยใช้กฎพื้นที่ทำงาน

กฎพื้นที่ทำงานที่มาพร้อมกับ Bazel จะได้รับการจัดทำเอกสารใน ส่วนกฎพื้นที่ทำงานในส่วน สร้างสารานุกรมและเอกสารประกอบเกี่ยวกับ กฎที่เก็บ Starlark ที่ฝัง

เนื่องจากที่เก็บภายนอกเป็นที่เก็บในตัวเอง จึงมักจะมี WORKSPACE ไฟล์ด้วย แต่ WORKSPACE ไฟล์เพิ่มเติมเหล่านี้ ละเว้นโดย Bazel โดยเฉพาะอย่างยิ่ง ที่เก็บที่ขึ้นอยู่กับไฟล์พัก ไม่เพิ่มโดยอัตโนมัติ

แพ็กเกจ

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

แพ็กเกจได้รับการระบุเป็นไดเรกทอรีที่มีไฟล์ชื่อ 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++ กฎไลบรารี A อาจมีกฎไลบรารี C++ อีกกฎหนึ่งสำหรับอินพุต ผลกระทบของทรัพยากร Dependency นี้ คือ ไฟล์ส่วนหัวของ B จะ ใช้ได้กับ A ในระหว่างการคอมไพล์ สัญลักษณ์ของ B จะพร้อมใช้งานสำหรับ A ระหว่างการลิงก์ และข้อมูลรันไทม์ของ B จะพร้อมใช้งานสำหรับ A ในระหว่าง

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

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

ป้ายกำกับ