คําจํากัดความที่พบบ่อย

รายงานปัญหา ดูแหล่งที่มา Nightly · 8.3 · 8.2 · 8.1 · 8.0 · 7.6

ส่วนนี้จะกำหนดคำศัพท์และแนวคิดต่างๆ ที่ใช้กันทั่วไปใน ฟังก์ชันหรือกฎการสร้างหลายรายการ

เนื้อหา

การแปลงข้อมูลเป็นโทเค็นของ Bourne Shell

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

แอตทริบิวต์ที่ต้องใช้โทเค็นนี้จะระบุไว้อย่างชัดเจนในคำจำกัดความในเอกสารนี้

โดยปกติแล้ว แอตทริบิวต์ที่ขึ้นอยู่กับการขยายตัวแปร "Make" และการแยกโทเค็น Bourne Shell จะใช้เพื่อส่งตัวเลือกที่กำหนดเองไปยังคอมไพเลอร์และเครื่องมืออื่นๆ ตัวอย่างแอตทริบิวต์ดังกล่าว ได้แก่ cc_library.copts และ java_library.javacopts การแทนที่เหล่านี้ช่วยให้ตัวแปรสตริงเดียวขยายเป็นรายการคำตัวเลือกเฉพาะการกำหนดค่าได้

การขยายป้ายกำกับ

แอตทริบิวต์สตริงของกฎบางข้อจะขึ้นอยู่กับการขยายป้ายกำกับ หากสตริงเหล่านั้นมีป้ายกำกับที่ถูกต้องเป็น สตริงย่อย เช่น //mypkg:target และป้ายกำกับนั้นเป็น ข้อกำหนดเบื้องต้นที่ประกาศของกฎปัจจุบัน ระบบจะขยายป้ายกำกับเป็น เส้นทางของไฟล์ที่แสดงโดย target //mypkg:target

ตัวอย่างแอตทริบิวต์ ได้แก่ genrule.cmd และ cc_binary.linkopts รายละเอียดอาจแตกต่างกันอย่างมากในแต่ละกรณีเกี่ยวกับปัญหาต่างๆ เช่น มีการขยายป้ายกำกับที่เกี่ยวข้องหรือไม่ วิธีจัดการป้ายกำกับที่ขยายไปยังหลายไฟล์ เป็นต้น โปรดดูรายละเอียดในเอกสารประกอบแอตทริบิวต์กฎ

แอตทริบิวต์ทั่วไปที่กำหนดโดยกฎการสร้างส่วนใหญ่

ส่วนนี้อธิบายแอตทริบิวต์ที่กำหนดโดยกฎการสร้างหลายรายการ แต่ไม่ใช่ทั้งหมด

แอตทริบิวต์ คำอธิบาย
data

รายการป้ายกำกับ ค่าเริ่มต้นคือ []

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

เอาต์พุตและไฟล์ที่เรียกใช้เริ่มต้นของเป้าหมายในแอตทริบิวต์ data ควรปรากฏในส่วน *.runfiles ของไฟล์ที่เรียกใช้งานได้ซึ่ง เอาต์พุตหรือมีการขึ้นต่อกันที่รันไทม์กับเป้าหมายนี้ ซึ่งอาจรวมถึงไฟล์หรือไบนารีที่ใช้เมื่อมีการเรียกใช้srcsของเป้าหมายนี้ ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีใช้และอ้างอิงไฟล์ข้อมูลได้ที่ส่วนการอ้างอิงข้อมูล

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

deps

รายการป้ายกำกับ ค่าเริ่มต้นคือ []

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

โดยทั่วไปแล้ว กฎเฉพาะภาษาจะจำกัดเป้าหมายที่แสดงไว้ให้เฉพาะเป้าหมายที่มีผู้ให้บริการที่เฉพาะเจาะจง

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

โดยส่วนใหญ่แล้วจะใช้deps Dependency เพื่ออนุญาตให้โมดูลหนึ่งใช้สัญลักษณ์ที่กำหนดไว้ในโมดูลอื่นซึ่งเขียนด้วยภาษาโปรแกรมเดียวกันและคอมไพล์แยกกัน นอกจากนี้ ยังอนุญาตให้ใช้การอ้างอิงข้ามภาษาได้ในหลายกรณี เช่น java_library เป้าหมายอาจขึ้นอยู่กับโค้ด C++ ในcc_library เป้าหมายโดยการแสดงรายการหลังในแอตทริบิวต์ deps ดูข้อมูลเพิ่มเติมได้ที่คำจำกัดความของการอ้างอิง

licenses

รายการสตริง กำหนดค่าไม่ได้ ค่าเริ่มต้นคือ ["none"]

รายการสตริงประเภทใบอนุญาตที่จะใช้กับเป้าหมายนี้ ซึ่งเป็นส่วนหนึ่งของ API การอนุญาตให้ใช้สิทธิที่เลิกใช้งานแล้วซึ่ง Bazel ไม่ได้ใช้แล้ว อย่า ใช้สิ่งนี้

srcs

รายการป้ายกำกับ ค่าเริ่มต้นคือ []

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

กฎเฉพาะภาษาอาจกำหนดให้ไฟล์ที่แสดงต้องมีส่วนขยายไฟล์ที่เฉพาะเจาะจง

แอตทริบิวต์ที่ใช้ร่วมกันในกฎการบิลด์ทั้งหมด

ส่วนนี้อธิบายแอตทริบิวต์ที่เพิ่มลงในกฎการสร้างทั้งหมดโดยนัย

แอตทริบิวต์ คำอธิบาย
aspect_hints

รายการป้ายกำกับ ค่าเริ่มต้นคือ []

รายการป้ายกำกับที่กำหนดเองซึ่งแสดงต่อ aspects (โดยเฉพาะอย่างยิ่ง aspects ที่เรียกใช้โดยการอ้างอิงย้อนกลับของกฎนี้) แต่ไม่ได้แสดงต่อการใช้งานของกฎนี้เอง โปรดดูรายละเอียดเกี่ยวกับผลลัพธ์ของคำใบ้เกี่ยวกับลักษณะที่เฉพาะเจาะจงในเอกสารประกอบสำหรับชุดกฎเฉพาะภาษา

คุณอาจคิดว่าคำแนะนำด้านลักษณะเป็นทางเลือกที่สมบูรณ์กว่าแท็ก เนื่องจากแท็กจะสื่อถึงสถานะบูลีนเท่านั้น (แท็กมีหรือไม่มีใน tags รายการ) แต่คำแนะนำด้านลักษณะจะสื่อถึงข้อมูลที่มีโครงสร้างที่กำหนดเองในผู้ให้บริการ

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

ดูตัวอย่างที่ชัดเจนได้ที่ swift_interop_hint และ swift_overlay ใน rules_swift

แนวทางปฏิบัติแนะนำ

  • เป้าหมายที่ระบุใน aspect_hints ควรมีขนาดเล็กและเรียบง่าย
  • ตรรกะเฉพาะภาษาควรพิจารณาเฉพาะคำแนะนำด้านลักษณะที่มีผู้ให้บริการที่เกี่ยวข้องกับภาษานั้นๆ และควรไม่สนใจคำแนะนำด้านลักษณะอื่นๆ
compatible_with

รายการป้ายกำกับ กำหนดค่าไม่ได้ ค่าเริ่มต้นคือ []

รายการสภาพแวดล้อมที่สามารถสร้างเป้าหมายนี้ได้ นอกเหนือจาก สภาพแวดล้อมที่รองรับเริ่มต้น

ซึ่งเป็นส่วนหนึ่งของระบบข้อจำกัดของ Bazel ที่ช่วยให้ผู้ใช้ประกาศได้ว่า เป้าหมายใดที่ขึ้นต่อกันได้และไม่ได้ เช่น ไบนารีที่สามารถติดตั้งใช้งานภายนอก ไม่ควรขึ้นอยู่กับไลบรารีที่มีโค้ดที่เป็นความลับของบริษัท ดูรายละเอียดได้ที่ ConstraintSemantics

deprecation

สตริง กำหนดค่าไม่ได้ ค่าเริ่มต้นคือ None

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

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

การขึ้นต่อกันภายในแพ็กเกจจะได้รับการยกเว้นจากคำเตือนนี้ ดังนั้น เช่น การสร้างการทดสอบของกฎที่เลิกใช้งานแล้วจะไม่ พบคำเตือน

หากเป้าหมายที่เลิกใช้งานแล้วขึ้นอยู่กับเป้าหมายอื่นที่เลิกใช้งานแล้ว ระบบจะไม่แสดงข้อความเตือน

เมื่อผู้ใช้หยุดใช้แล้ว คุณจะนำเป้าหมายออกได้

exec_compatible_with

รายการป้ายกำกับ กำหนดค่าไม่ได้ ค่าเริ่มต้นคือ []

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

exec_group_compatible_with

พจนานุกรมของสตริงไปยังรายการของป้ายกำกับ กำหนดค่าไม่ได้ ค่าเริ่มต้นคือ {}

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

exec_properties

พจนานุกรมของสตริง ค่าเริ่มต้นคือ {}

พจนานุกรมของสตริงที่จะเพิ่มลงใน exec_properties ของแพลตฟอร์มที่เลือกสําหรับเป้าหมายนี้ ดูexec_propertiesของกฎแพลตฟอร์ม

หากมีคีย์ทั้งในพร็อพเพอร์ตี้ระดับแพลตฟอร์มและระดับเป้าหมาย ระบบจะนำค่ามาจากเป้าหมาย

โดยสามารถนำหน้าคีย์ด้วยชื่อของกลุ่มการดำเนินการ ตามด้วย . เพื่อใช้คีย์กับกลุ่มการดำเนินการนั้นๆ เท่านั้น

features

รายการสตริงฟีเจอร์ ค่าเริ่มต้นคือ []

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

แอตทริบิวต์ features นี้จะรวมกับแอตทริบิวต์ features ระดับ package เช่น หากเปิดใช้ฟีเจอร์ ["a", "b"] ที่ระดับแพ็กเกจ และแอตทริบิวต์ features ของเป้าหมายมี ["-a", "c"] ฟีเจอร์ที่เปิดใช้สำหรับกฎจะเป็น "b" และ "c" ดูตัวอย่าง

package_metadata

รายการป้ายกำกับ กำหนดค่าไม่ได้ ค่าเริ่มต้นคือแพ็กเกจ default_package_metadata

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

กรณีการใช้งาน Canonical คือกรณีของ rules_license สำหรับกรณีการใช้งานดังกล่าว package_metadata และ default_package_metadata จะใช้เพื่อแนบข้อมูล เกี่ยวกับใบอนุญาตหรือเวอร์ชันของแพ็กเกจกับเป้าหมาย คุณสามารถใช้แง่มุมที่ใช้กับไบนารีระดับบนสุดเพื่อรวบรวมข้อมูลเหล่านั้นและสร้างรายงานการปฏิบัติตามข้อกำหนดได้

restricted_to

รายการป้ายกำกับ กำหนดค่าไม่ได้ ค่าเริ่มต้นคือ []

รายการสภาพแวดล้อมที่สามารถสร้างเป้าหมายนี้ได้ แทน สภาพแวดล้อมที่รองรับเริ่มต้น

ซึ่งเป็นส่วนหนึ่งของระบบข้อจำกัดของ Bazel ดูรายละเอียดได้ที่ compatible_with

tags

รายการสตริง กำหนดค่าไม่ได้ ค่าเริ่มต้นคือ []

คุณใช้แท็กกับกฎใดก็ได้ แท็กในกฎการทดสอบและ test_suiteมีประโยชน์ในการจัดหมวดหมู่การทดสอบ แท็กในเป้าหมายที่ไม่ใช่การทดสอบใช้เพื่อควบคุมการดำเนินการแบบแซนด์บ็อกซ์ของ genrules และ Starlark รวมถึงการแยกวิเคราะห์โดยเจ้าหน้าที่และ/หรือเครื่องมือภายนอก

Bazel จะแก้ไขลักษณะการทำงานของโค้ดแซนด์บ็อกซ์หากพบคีย์เวิร์ดต่อไปนี้ ในแอตทริบิวต์ tags ของการทดสอบหรือเป้าหมาย genrule ใดๆ หรือคีย์ของ execution_requirements สำหรับการดำเนินการ Starlark ใดๆ

  • no-sandbox คีย์เวิร์ดจะทำให้การดำเนินการหรือการทดสอบไม่เคย อยู่ในแซนด์บ็อกซ์ โดยยังคงแคชหรือเรียกใช้จากระยะไกลได้ ให้ใช้ no-cache หรือ no-remote เพื่อป้องกันไม่ให้เกิดการดำเนินการดังกล่าวอย่างใดอย่างหนึ่งหรือทั้ง 2 อย่าง
  • no-cache คำหลักจะทำให้ระบบไม่แคชการดำเนินการหรือการทดสอบ (ในเครื่องหรือจากระยะไกล) หมายเหตุ: สำหรับวัตถุประสงค์ของแท็กนี้ แคชดิสก์ จะถือว่าเป็นแคชในเครื่อง ส่วนแคช HTTP และ gRPC จะถือว่าเป็นแคช ระยะไกล แคชอื่นๆ เช่น Skyframe หรือแคชการดำเนินการแบบถาวรจะไม่ได้รับผลกระทบ
  • no-remote-cache คีย์เวิร์ดจะทำให้ระบบไม่แคชการดำเนินการหรือการทดสอบจากระยะไกล (แต่ระบบอาจแคชไว้ในเครื่อง และอาจดำเนินการจากระยะไกลด้วย) หมายเหตุ: สำหรับวัตถุประสงค์ของแท็กนี้ แคชดิสก์จะถือว่าเป็นแคชในเครื่อง ส่วนแคช HTTP และ gRPC จะถือว่าเป็นแคชระยะไกล แคชอื่นๆ เช่น Skyframe หรือแคชการดำเนินการแบบถาวรจะไม่ได้รับผลกระทบ หากใช้แคชในเครื่องและแคชระยะไกลร่วมกัน (แคชแบบรวม) ระบบจะถือว่าเป็นแคชระยะไกลและปิดใช้ทั้งหมด เว้นแต่จะมีการตั้งค่า --incompatible_remote_results_ignore_disk ในกรณีนี้ระบบจะใช้คอมโพเนนต์ในเครื่อง
  • no-remote-exec คีย์เวิร์ดส่งผลให้ไม่มีการดำเนินการหรือการทดสอบ จากระยะไกล (แต่ระบบอาจแคชไว้จากระยะไกล)
  • no-remote คีย์เวิร์ดจะป้องกันไม่ให้ดำเนินการหรือทดสอบจากระยะไกล หรือ แคชจากระยะไกล ซึ่งเทียบเท่ากับการใช้ทั้ง no-remote-cache และ no-remote-exec
  • no-remote-cache-upload คีย์เวิร์ดจะปิดใช้ส่วนการอัปโหลดของการแคชระยะไกลของสปอน แต่ไม่ได้ปิดใช้การดำเนินการจากระยะไกล
  • local คีย์เวิร์ดจะป้องกันไม่ให้แคชการดำเนินการหรือการทดสอบจากระยะไกล ดำเนินการจากระยะไกล หรือเรียกใช้ภายในแซนด์บ็อกซ์ สำหรับ genrules และการทดสอบ การทำเครื่องหมายกฎด้วยแอตทริบิวต์ local = True จะมีผลเหมือนกัน
  • requires-network คีย์เวิร์ดอนุญาตให้เข้าถึงเครือข่ายภายนอก จากภายในแซนด์บ็อกซ์ แท็กนี้จะมีผลก็ต่อเมื่อเปิดใช้แซนด์บ็อกซ์
  • คีย์เวิร์ด block-network จะบล็อกการเข้าถึงเครือข่ายภายนอก จากภายในแซนด์บ็อกซ์ ในกรณีนี้ ระบบจะอนุญาตเฉพาะการสื่อสาร กับ localhost เท่านั้น แท็กนี้จะมีผลก็ต่อเมื่อเปิดใช้ Sandbox เท่านั้น
  • requires-fakeroot เรียกใช้การทดสอบหรือการดำเนินการเป็น uid และ gid 0 (กล่าวคือ ผู้ใช้รูท ) ฟีเจอร์นี้รองรับเฉพาะใน Linux แท็กนี้จะมีความสำคัญเหนือ ตัวเลือกบรรทัดคำสั่ง --sandbox_fake_username

โดยทั่วไปแล้ว Tag ในการทดสอบจะใช้เพื่อใส่คำอธิบายประกอบเกี่ยวกับบทบาทของการทดสอบในกระบวนการแก้ไขข้อบกพร่องและการเผยแพร่ โดยปกติแล้ว แท็กจะมีประโยชน์มากที่สุดสําหรับการทดสอบ C++ และ Python ซึ่งไม่มีความสามารถในการเพิ่มคำอธิบายประกอบรันไทม์ การใช้แท็กและองค์ประกอบ size ช่วยให้มีความยืดหยุ่นในการรวบรวมชุดการทดสอบตามนโยบายการเช็คอินของโค้ดเบส

Bazel จะแก้ไขลักษณะการทำงานของการทดสอบหากพบคีย์เวิร์ดต่อไปนี้ในแอตทริบิวต์ tags ของกฎการทดสอบ

  • exclusive จะบังคับให้เรียกใช้การทดสอบในโหมด "เฉพาะ" เพื่อให้มั่นใจว่าจะไม่มีการทดสอบอื่นทำงานพร้อมกัน การทดสอบดังกล่าวจะดำเนินการตามลำดับหลังจากกิจกรรมการสร้างทั้งหมดและการทดสอบที่ไม่ผูกขาดเสร็จสมบูรณ์แล้ว การดำเนินการจากระยะไกลจะ ปิดใช้สำหรับการทดสอบดังกล่าวเนื่องจาก Bazel ไม่สามารถควบคุมสิ่งที่ ทำงานในเครื่องระยะไกลได้
  • exclusive-if-local จะบังคับให้เรียกใช้การทดสอบในโหมด "เฉพาะ" หากเรียกใช้ในเครื่อง แต่จะเรียกใช้การทดสอบแบบขนานหากเรียกใช้จากระยะไกล
  • manual จะยกเว้นเป้าหมายจากการขยายไวลด์การ์ดรูปแบบเป้าหมาย (..., :*, :all ฯลฯ) และกฎ test_suite ซึ่งไม่ได้แสดงรายการการทดสอบอย่างชัดเจนเมื่อคำนวณชุดเป้าหมายระดับบนสุดที่จะสร้าง/เรียกใช้ สำหรับคำสั่ง build, test และ coverage แต่จะไม่ส่งผลต่อ การขยายไวลด์การ์ดเป้าหมายหรือชุดการทดสอบในบริบทอื่นๆ รวมถึงคำสั่ง query โปรดทราบว่า manual ไม่ได้หมายความว่าระบบสร้าง/ทดสอบอย่างต่อเนื่องไม่ควรสร้าง/เรียกใช้เป้าหมายโดยอัตโนมัติ เช่น คุณอาจต้องการยกเว้นเป้าหมายจาก bazel test ... เนื่องจากต้องใช้แฟล็ก Bazel ที่เฉพาะเจาะจง แต่ยังคงรวมไว้ในการทดสอบก่อนส่งหรือการทดสอบต่อเนื่องที่กำหนดค่าอย่างถูกต้อง
  • คีย์เวิร์ด external จะบังคับให้ทดสอบโดยไม่มีเงื่อนไข (ไม่ว่าค่า --cache_test_results จะเป็นอะไรก็ตาม)
ดู ข้อกำหนดของแท็ก ในสารานุกรมการทดสอบเพื่อดูข้อกำหนดเพิ่มเติมเกี่ยวกับแท็กที่แนบมากับเป้าหมายการทดสอบ
target_compatible_with

รายการป้ายกำกับ ค่าเริ่มต้นคือ []

รายการ constraint_values ที่ต้องมีในแพลตฟอร์มเป้าหมายเพื่อให้ระบบพิจารณาว่าเป้าหมายนี้เข้ากันได้ ซึ่งเป็นข้อจำกัดเพิ่มเติมจากข้อจำกัดที่กำหนดไว้แล้วตาม ประเภทกฎ หากแพลตฟอร์มเป้าหมายไม่เป็นไปตามข้อจำกัดทั้งหมดที่ระบุไว้ ระบบจะถือว่าเป้าหมายใช้ร่วมกันไม่ได้ ระบบจะข้ามเป้าหมายที่ไม่เข้ากันสำหรับการสร้างและการทดสอบเมื่อขยายรูปแบบเป้าหมาย (เช่น //..., :all) เมื่อระบุอย่างชัดเจนใน บรรทัดคำสั่ง เป้าหมายที่ไม่เข้ากันจะทำให้ Bazel พิมพ์ข้อผิดพลาดและทำให้ การสร้างหรือการทดสอบล้มเหลว

เป้าหมายที่ขึ้นอยู่กับเป้าหมายที่ไม่เข้ากันโดยอ้อมจะถือว่าไม่เข้ากัน ระบบจะข้ามการสร้างและการทดสอบด้วย

รายการที่ว่างเปล่า (ซึ่งเป็นค่าเริ่มต้น) หมายความว่าเป้าหมายเข้ากันได้กับทุกแพลตฟอร์ม

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

ดูข้อมูลเพิ่มเติมเกี่ยวกับการข้ามเป้าหมายที่ไม่รองรับได้ที่หน้าแพลตฟอร์ม

testonly

บูลีน กำหนดค่าไม่ได้ ค่าเริ่มต้นคือ False ยกเว้นเป้าหมายการทดสอบและชุดการทดสอบ

หาก True มีเพียงเป้าหมาย testonly (เช่น การทดสอบ) เท่านั้นที่ขึ้นอยู่กับเป้าหมายนี้ได้

ในทำนองเดียวกัน กฎที่ไม่ได้เป็น testonly จะไม่ได้รับอนุญาตให้ ขึ้นอยู่กับกฎที่เป็น testonly

การทดสอบ (*_test กฎ) และชุดการทดสอบ (กฎ test_suite) จะtestonly โดยค่าเริ่มต้น

แอตทริบิวต์นี้มีไว้เพื่อระบุว่าไม่ควรมีเป้าหมาย ในไบนารีที่เผยแพร่ไปยังเวอร์ชันที่ใช้งานจริง

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

toolchains

รายการป้ายกำกับ กำหนดค่าไม่ได้ ค่าเริ่มต้นคือ []

ชุดเป้าหมายที่เป้าหมายนี้ได้รับอนุญาตให้เข้าถึงตัวแปรที่สร้าง เป้าหมายเหล่านี้เป็นอินสแตนซ์ของกฎที่ให้ TemplateVariableInfo หรือเป้าหมายพิเศษสำหรับประเภท Toolchain ที่สร้างขึ้นใน Bazel ซึ่งรวมถึง

  • @bazel_tools//tools/cpp:toolchain_type
  • @rules_java//toolchains:current_java_runtime

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

visibility

รายการป้ายกำกับ กำหนดค่าไม่ได้ ค่าเริ่มต้นแตกต่างกัน

แอตทริบิวต์ visibility จะควบคุมว่าเป้าหมายสามารถ ขึ้นอยู่กับเป้าหมายในตำแหน่งอื่นๆ ได้หรือไม่ ดูเอกสารประกอบเกี่ยวกับระดับการมองเห็น

สำหรับเป้าหมายที่ประกาศโดยตรงในไฟล์ BUILD หรือในมาโครเดิมที่เรียกจากไฟล์ BUILD ค่าเริ่มต้นคือ default_visibility ของแพ็กเกจ หากระบุไว้ หรือไม่ก็ ["//visibility:private"] สำหรับเป้าหมายที่ประกาศในมาโครสัญลักษณ์อย่างน้อย 1 รายการ ค่าเริ่มต้นจะเป็นเพียง ["//visibility:private"] เสมอ (ซึ่งทำให้ใช้ได้เฉพาะภายในแพ็กเกจที่มีโค้ดของมาโคร)

แอตทริบิวต์ที่ใช้ร่วมกันในกฎการทดสอบทั้งหมด (*_test)

ส่วนนี้อธิบายแอตทริบิวต์ที่ใช้ร่วมกันในกฎการทดสอบทั้งหมด

แอตทริบิวต์ คำอธิบาย
args

รายการสตริง ซึ่งขึ้นอยู่กับ $(location) และ การแทนที่"สร้างตัวแปร" และ การแยกโทเค็นของ Bourne Shell ค่าเริ่มต้นคือ []

อาร์กิวเมนต์บรรทัดคำสั่งที่ Bazel ส่งไปยังเป้าหมายเมื่อมีการ เรียกใช้ด้วย bazel test

อาร์กิวเมนต์เหล่านี้จะส่งผ่านก่อน--test_argค่า ที่ระบุในบรรทัดคำสั่ง bazel test

env

พจนานุกรมของสตริง ค่าอาจมีการแทนที่ $(location) และ "สร้างตัวแปร" ค่าเริ่มต้นคือ {}

ระบุตัวแปรสภาพแวดล้อมเพิ่มเติมที่จะตั้งค่าเมื่อbazel testเรียกใช้การทดสอบ

แอตทริบิวต์นี้ใช้กับกฎเนทีฟเท่านั้น เช่น cc_test, py_test และ sh_test แต่จะไม่มีผลกับ กฎการทดสอบที่กำหนดโดย Starlark สำหรับกฎ Starlark ของคุณเอง คุณสามารถเพิ่มแอตทริบิวต์ "env" และใช้เพื่อป้อนข้อมูล RunEnvironmentInfo Provider

TestEnvironment Provider.

env_inherit

รายการสตริง ค่าเริ่มต้นคือ []

ระบุตัวแปรสภาพแวดล้อมเพิ่มเติมที่จะรับค่าจาก สภาพแวดล้อมภายนอกเมื่อ bazel test ดำเนินการทดสอบ

แอตทริบิวต์นี้ใช้กับกฎเนทีฟเท่านั้น เช่น cc_test, py_test และ sh_test แต่จะไม่มีผลกับกฎการทดสอบที่กำหนดโดย Starlark

size

สตริง "enormous", "large", "medium" หรือ "small"; กำหนดค่าไม่ได้ ค่าเริ่มต้นคือ "medium"

ระบุ "ความหนัก" ของเป้าหมายการทดสอบ ซึ่งหมายถึงเวลา/ทรัพยากรที่ต้องใช้ในการเรียกใช้

การทดสอบหน่วยถือเป็น "เล็ก" การทดสอบการผสานรวมถือเป็น "ปานกลาง" และการทดสอบแบบครบวงจรถือเป็น "ใหญ่" หรือ "ใหญ่มาก" Bazel ใช้ขนาดเพื่อกำหนดการหมดเวลาเริ่มต้น ซึ่งสามารถลบล้างได้โดยใช้แอตทริบิวต์ timeout การหมดเวลาใช้กับการทดสอบทั้งหมดในเป้าหมาย BUILD ไม่ใช่การทดสอบแต่ละรายการ เมื่อเรียกใช้การทดสอบในเครื่อง ระบบจะใช้ size เพิ่มเติมเพื่อวัตถุประสงค์ในการกำหนดเวลา โดย Bazel จะพยายามใช้ --local_{ram,cpu}_resources และไม่ทำให้เครื่องในเครื่องทำงานหนักเกินไปโดยการเรียกใช้การทดสอบที่ใช้ทรัพยากรมากพร้อมกัน

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

ขนาด RAM (ในหน่วย MB) CPU (ในแกน CPU) การหมดเวลาเริ่มต้น
เล็ก 20 1 สั้น (1 นาที)
ปานกลาง 100 1 ปานกลาง (5 นาที)
ใหญ่ 300 1 ยาว (15 นาที)
ใหญ่โต 800 1 ตลอดไป (60 นาที)

ระบบจะตั้งค่าตัวแปรสภาพแวดล้อม TEST_SIZE เป็นค่าของแอตทริบิวต์นี้เมื่อสร้างการทดสอบ

timeout

สตริง "short", "moderate", "long" หรือ "eternal"; กำหนดค่าไม่ได้; ค่าเริ่มต้นได้มาจาก แอตทริบิวต์ size ของการทดสอบ

ระยะเวลาที่คาดว่าจะใช้ในการทดสอบก่อนที่จะกลับมา

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

ค่าระยะหมดเวลา ระยะเวลา
วิดีโอสั้น 1 นาที
ปานกลาง 5 นาที
ยาว 15 นาที
นิรันดร์ 60 นาที

สำหรับเวลาอื่นๆ นอกเหนือจากข้างต้น คุณสามารถลบล้างการหมดเวลาทดสอบได้ด้วย --test_timeoutแฟล็ก Bazel เช่น สำหรับการเรียกใช้ด้วยตนเองภายใต้ เงื่อนไขที่ทราบว่าช้า ค่า --test_timeout มีหน่วยเป็นวินาที เช่น --test_timeout=120 จะตั้งค่าการหมดเวลาทดสอบเป็น 2 นาที

ระบบจะตั้งค่าตัวแปรสภาพแวดล้อม TEST_TIMEOUT เป็นการหมดเวลาทดสอบ (เป็นวินาที) เมื่อสร้างการทดสอบ

flaky

บูลีน กำหนดค่าไม่ได้ ค่าเริ่มต้นคือ False

ทำเครื่องหมายการทดสอบว่าไม่น่าเชื่อถือ

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

shard_count

จำนวนเต็มที่ไม่เป็นลบซึ่งน้อยกว่าหรือเท่ากับ 50 ค่าเริ่มต้นคือ -1

ระบุจำนวนชาร์ดแบบขนาน ที่จะใช้เรียกใช้การทดสอบ

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

หากเปิดใช้การแบ่งการทดสอบ ระบบจะตั้งค่าตัวแปรสภาพแวดล้อม TEST_TOTAL_SHARDS เป็นค่านี้เมื่อสร้างการทดสอบ

การแบ่งพาร์ติชันต้องใช้โปรแกรมเรียกใช้การทดสอบที่รองรับโปรโตคอลการแบ่งพาร์ติชันการทดสอบ หากไม่เป็นเช่นนั้น ก็มีแนวโน้มสูงที่จะเรียกใช้การทดสอบทุกรายการในทุก Shard ซึ่ง ไม่ใช่สิ่งที่คุณต้องการ

ดูรายละเอียดเกี่ยวกับการแบ่งกลุ่มได้ที่ การแบ่งกลุ่มการทดสอบ ในสารานุกรมการทดสอบ

local

บูลีน กำหนดค่าไม่ได้ ค่าเริ่มต้นคือ False

บังคับให้เรียกใช้การทดสอบในเครื่องโดยไม่ต้องใช้แซนด์บ็อกซ์

การตั้งค่านี้เป็น True จะเทียบเท่ากับการระบุ "local" เป็นแท็ก (tags=["local"])

แอตทริบิวต์ที่ใช้ร่วมกันในกฎไบนารีทั้งหมด (*_binary)

ส่วนนี้อธิบายแอตทริบิวต์ที่ใช้ร่วมกันในกฎไบนารีทั้งหมด

แอตทริบิวต์ คำอธิบาย
args

รายการสตริง โดยขึ้นอยู่กับ $(location) และ "Make variable" substitution, and Bourne shell tokenization; nonconfigurable; ค่าเริ่มต้นคือ []

อาร์กิวเมนต์บรรทัดคำสั่งที่ Bazel จะส่งไปยังเป้าหมายเมื่อมีการเรียกใช้ ไม่ว่าจะโดยคำสั่ง run หรือเป็นการทดสอบ อาร์กิวเมนต์เหล่านี้จะ ส่งผ่านก่อนอาร์กิวเมนต์ที่ระบุในbazel runหรือ บรรทัดคำสั่ง bazel test

หมายเหตุ: ระบบจะไม่ส่งอาร์กิวเมนต์เมื่อคุณเรียกใช้เป้าหมาย ภายนอก Bazel (เช่น โดยการเรียกใช้ไบนารีใน bazel-bin/ ด้วยตนเอง)

env

พจนานุกรมของสตริง ค่าต้องเป็นไปตามการแทนที่ $(location) และ "สร้างตัวแปร" ค่าเริ่มต้นคือ {}

ระบุตัวแปรสภาพแวดล้อมเพิ่มเติมที่จะตั้งค่าเมื่อ bazel run เรียกใช้เป้าหมาย

แอตทริบิวต์นี้ใช้กับกฎเนทีฟเท่านั้น เช่น cc_binary, py_binary และ sh_binary แต่จะไม่มีผลกับกฎที่เรียกใช้งานได้ซึ่งกำหนดโดย Starlark สำหรับกฎ Starlark ของคุณเอง คุณสามารถเพิ่มแอตทริบิวต์ "env" และใช้เพื่อป้อนข้อมูล RunEnvironmentInfo Provider ได้

หมายเหตุ: ระบบจะไม่ตั้งค่าตัวแปรสภาพแวดล้อมเมื่อคุณเรียกใช้เป้าหมายนอก Bazel (เช่น โดยการเรียกใช้ไบนารีใน bazel-bin/ ด้วยตนเอง)

output_licenses

รายการสตริง ค่าเริ่มต้นคือ []

ใบอนุญาตของไฟล์เอาต์พุตที่ไบนารีนี้สร้างขึ้น ซึ่งเป็นส่วนหนึ่งของ API การอนุญาตให้ใช้สิทธิที่เลิกใช้งานแล้วซึ่ง Bazel ไม่ได้ใช้แล้ว อย่า ใช้สิ่งนี้

แอตทริบิวต์ที่กำหนดค่าได้

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

ตัวอย่างต่อไปนี้ประกาศแหล่งที่มาต่างๆ สำหรับสถาปัตยกรรมเป้าหมายต่างๆ การเรียกใช้ bazel build :multiplatform_lib --cpu x86 จะสร้างเป้าหมายโดยใช้ x86_impl.cc ขณะที่การแทนที่ --cpu arm จะทำให้ใช้ arm_impl.cc แทน

cc_library(
    name = "multiplatform_lib",
    srcs = select({
        ":x86_mode": ["x86_impl.cc"],
        ":arm_mode": ["arm_impl.cc"]
    })
)
config_setting(
    name = "x86_mode",
    values = { "cpu": "x86" }
)
config_setting(
    name = "arm_mode",
    values = { "cpu": "arm" }
)

ฟังก์ชัน select() จะเลือกค่าอื่นแทนค่าหนึ่งๆ สำหรับแอตทริบิวต์ที่กำหนดค่าได้โดยอิงตาม เกณฑ์ config_setting หรือ constraint_value ที่การกำหนดค่าของเป้าหมายเป็นไปตาม

Bazel จะประเมินแอตทริบิวต์ที่กำหนดค่าได้หลังจากประมวลผลมาโครและก่อน ประมวลผลกฎ (ในทางเทคนิคคือระหว่าง เฟสการโหลดและการวิเคราะห์) การประมวลผลใดๆ ก่อนการประเมิน select() จะไม่ทราบว่า select() เลือกสาขาใด เช่น แมโครไม่สามารถเปลี่ยนลักษณะการทำงานตามสาขาที่เลือก และbazel queryทำได้เพียงคาดเดาอย่างระมัดระวังเกี่ยวกับทรัพยากร Dependency ที่กำหนดค่าได้ของเป้าหมาย ดูข้อมูลเพิ่มเติมเกี่ยวกับการใช้ select() กับกฎและมาโครได้ที่ คำถามที่พบบ่อยนี้

แอตทริบิวต์ที่มีเครื่องหมาย nonconfigurable ในเอกสารประกอบจะใช้ฟีเจอร์นี้ไม่ได้ โดยปกติแล้ว แอตทริบิวต์จะกำหนดค่าไม่ได้เนื่องจาก Bazel ต้องทราบค่าของแอตทริบิวต์ภายในก่อนจึงจะกำหนดวิธีแก้ไขselect()ได้

ดูภาพรวมโดยละเอียดได้ที่ แอตทริบิวต์การสร้างที่กำหนดค่าได้

เป้าหมายเอาต์พุตโดยนัย

เราเลิกใช้งานเอาต์พุตโดยนัยใน C++ แล้ว โปรดงดเว้นการใช้คำดังกล่าว ในภาษาอื่นๆ หากเป็นไปได้ เรายังไม่มีเส้นทางการเลิกใช้งาน แต่ในที่สุดก็จะเลิกใช้งานเช่นกัน

เมื่อกำหนดกฎการสร้างในไฟล์ BUILD คุณจะประกาศเป้าหมายกฎใหม่ที่มีชื่อในแพ็กเกจอย่างชัดเจน ฟังก์ชันกฎการสร้างหลายฟังก์ชันยังโดยนัยเกี่ยวข้องกับเป้าหมายไฟล์เอาต์พุตอย่างน้อย 1 รายการ ซึ่งเนื้อหาและความหมายจะขึ้นอยู่กับกฎ เช่น เมื่อคุณประกาศjava_binary(name='foo', ...) rule อย่างชัดเจน คุณก็ยังประกาศไฟล์เอาต์พุต เป้าหมาย foo_deploy.jar เป็นสมาชิกของแพ็กเกจเดียวกันโดยนัยด้วย (เป้าหมายนี้เป็นที่เก็บถาวร Java แบบสแตนด์อโลนที่เหมาะ สำหรับการติดตั้งใช้งาน)

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

สำหรับกฎการสร้างแต่ละประเภท เอกสารประกอบของกฎจะมี ส่วนพิเศษที่อธิบายรายละเอียดชื่อและเนื้อหาของเอาต์พุตโดยนัย ที่เกิดจากการประกาศกฎประเภทนั้น

ความแตกต่างที่สำคัญแต่ค่อนข้างละเอียดระหว่างเนมสเปซ 2 รายการที่ใช้โดยระบบบิลด์ ป้ายกำกับระบุเป้าหมาย ซึ่งอาจเป็นกฎหรือไฟล์ และเป้าหมายไฟล์อาจแบ่งออกเป็น เป้าหมายไฟล์ต้นฉบับ (หรืออินพุต) และเป้าหมายไฟล์ที่ได้มา (หรือเอาต์พุต) สิ่งเหล่านี้คือสิ่งที่คุณสามารถกล่าวถึงในไฟล์ BUILD สร้างจากบรรทัดคำสั่ง หรือตรวจสอบโดยใช้ bazel query นี่คือเนมสเปซเป้าหมาย เป้าหมายไฟล์แต่ละรายการจะสอดคล้อง กับไฟล์จริง 1 ไฟล์ในดิสก์ ("เนมสเปซของระบบไฟล์") เป้าหมายกฎแต่ละรายการ อาจสอดคล้องกับไฟล์จริง 0, 1 หรือหลายไฟล์ในดิสก์ อาจมีไฟล์ในดิสก์ที่ไม่มีเป้าหมายที่สอดคล้องกัน เช่น ไฟล์ออบเจ็กต์ .o ที่สร้างขึ้นระหว่างการคอมไพล์ C++ ไม่สามารถอ้างอิงจากภายในไฟล์ BUILD หรือจากบรรทัดคำสั่งได้ ด้วยวิธีนี้ เครื่องมือบิลด์อาจซ่อนรายละเอียดการใช้งานบางอย่างของ วิธีที่เครื่องมือทำงาน ซึ่งอธิบายไว้อย่างละเอียดในการอ้างอิงแนวคิด BUILD