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

รายงานปัญหา ดูแหล่งที่มา Nightly · 8.4 · 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) เพื่อ รวมเอาต์พุตเริ่มต้นของเป้าหมายเหล่านั้น

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

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

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

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

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

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

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

deprecation

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

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

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

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

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

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

distribs

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

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

exec_compatible_with

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

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

exec_properties

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

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

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

features

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

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

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

restricted_to

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

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

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

tags

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

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

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

  • no-sandbox คีย์เวิร์ดจะทำให้การดำเนินการหรือการทดสอบไม่เคย อยู่ในแซนด์บ็อกซ์ แต่ยังแคชหรือเรียกใช้จากระยะไกลได้ ให้ใช้ no-cache หรือ no-remote เพื่อป้องกันไม่ให้เกิดการดำเนินการดังกล่าว
  • 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 ซึ่งไม่มีความสามารถในการใส่คำอธิบายประกอบรันไทม์ การใช้แท็กและองค์ประกอบขนาด ช่วยให้มีความยืดหยุ่นในการรวบรวมชุดการทดสอบตามนโยบายการเช็คอิน ของโค้ดเบส

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:current_cc_toolchain
  • @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) และ "Make variable" ค่าเริ่มต้นคือ {}

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

แอตทริบิวต์นี้ใช้กับกฎเนทีฟเท่านั้น เช่น cc_test, py_test และ sh_test แต่จะไม่มีผลกับ กฎการทดสอบที่กำหนดโดย Starlark สำหรับกฎ Starlark ของคุณเอง คุณสามารถเพิ่มแอตทริบิวต์ "env" และใช้เพื่อป้อนข้อมูล 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 และ Bourne shell tokenization nonconfigurable ค่าเริ่มต้นคือ []

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

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

env

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

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

แอตทริบิวต์นี้ใช้กับกฎเนทีฟเท่านั้น เช่น cc_binary, py_binary และ sh_binary แต่จะไม่มีผลกับกฎที่เรียกใช้งานได้ซึ่งกำหนดโดย Starlark

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

output_licenses

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

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

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

แอตทริบิวต์ส่วนใหญ่เป็น "กำหนดค่าได้" ซึ่งหมายความว่าค่าของแอตทริบิวต์อาจเปลี่ยนแปลงเมื่อ สร้างเป้าหมายด้วยวิธีต่างๆ โดยเฉพาะอย่างยิ่ง แอตทริบิวต์ที่กำหนดค่าได้ อาจแตกต่างกันไปตาม Flag ที่ส่งไปยังบรรทัดคำสั่ง 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