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

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

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

ป้ายกำกับ