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

รายงานปัญหา ดูซอร์สโค้ด รุ่น Nightly · 7.3 · 7.2 · 7.1 · 7.0 · 6.5

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

เนื้อหา

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

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

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

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

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

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

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

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

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

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

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

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

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

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

deps

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

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

โดยทั่วไปแล้ว กฎเฉพาะภาษาจะจำกัดเป้าหมายที่แสดงอยู่คือรายการที่มี providers แก่ Google

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

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

licenses

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

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

srcs

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

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

กฎสำหรับภาษาใดภาษาหนึ่งมักกำหนดให้ไฟล์ที่ระบุมีส่วนขยายไฟล์ที่เฉพาะเจาะจง

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

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

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

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

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

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

deprecation

String; nonconfigurable; ค่าเริ่มต้นคือ None

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

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

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

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

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

distribs

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

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

exec_compatible_with

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

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

exec_properties

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

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

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

features

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

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

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

restricted_to

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

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

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

tags

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

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

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

  • ผลลัพธ์ของคีย์เวิร์ด no-sandbox คำในการกระทำหรือการทดสอบไม่เคยหายไป ถูกแซนด์บ็อกซ์ ยังคงแคชหรือเรียกใช้จากระยะไกลได้ - ใช้ no-cache หรือ no-remote เพื่อป้องกันเหตุการณ์ใดเหตุการณ์หนึ่งหรือทั้ง 2 อย่าง
  • ผลลัพธ์ของคีย์เวิร์ด no-cache คำในการกระทำหรือการทดสอบไม่เคยหายไป แคช (ระยะไกลหรือในเครื่อง)
  • คีย์เวิร์ด no-remote-cache ส่งผลให้การดำเนินการหรือการทดสอบไม่ได้รับการแคชจากระยะไกล (แต่อาจมีการแคชในเครื่องและอาจดำเนินการจากระยะไกลได้) หมายเหตุ: สําหรับวัตถุประสงค์ของแท็กนี้ ระบบจะถือว่าแคชดิสก์เป็นแคชในเครื่อง ส่วนแคช http และ gRPC จะถือว่าอยู่ระยะไกล หากใช้ดิสก์แคชในเครื่องและแคชระยะไกลร่วมกัน (แคชรวม) ระบบจะถือว่าเป็นแคชระยะไกลและปิดใช้โดยสิ้นเชิง เว้นแต่ --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 ได้ แท็กนี้จะมีผลก็ต่อเมื่อแซนด์บ็อกซ์ เปิดอยู่
  • requires-fakeroot เรียกใช้การทดสอบหรือการดำเนินการเป็น uid และ gid 0 (ซึ่งก็คือรูท) ผู้ใช้) ฟีเจอร์นี้รองรับเฉพาะใน Linux แท็กนี้จะมีความสำคัญเหนือแท็ก ตัวเลือกบรรทัดคำสั่ง --sandbox_fake_username

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

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

หากเป็น True เฉพาะเป้าหมายทดสอบเท่านั้น (เช่น การทดสอบ) ที่ใช้เป้าหมายนี้ได้

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

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

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

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

toolchains

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

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

  • @bazel_tools//tools/cpp:current_cc_toolchain
  • @bazel_tools//tools/jdk:current_java_runtime

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

visibility

รายการป้ายกํากับ ไม่สามารถกําหนดค่าได้ ค่าเริ่มต้นคือ default_visibility จาก package หากระบุไว้ หรือ "//visibility:private" ในกรณีอื่น

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

แอตทริบิวต์ทั่วไปสำหรับกฎการทดสอบทั้งหมด (*_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" และใช้เพื่อป้อนข้อมูล TestEnvironment ผู้ให้บริการ

env_inherit

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

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

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

size

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

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

การทดสอบ 1 หน่วยถือเป็นการทดสอบ "เล็ก" การทดสอบการผสานรวม "ปานกลาง" และการทดสอบจากต้นทางถึงปลายทาง "ใหญ่" หรือ "ขนาดใหญ่ที่สุด" 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"; nonconfigurable; ได้มาค่าเริ่มต้น จากแอตทริบิวต์ size ของการทดสอบ

ระยะเวลาที่คาดว่าการทดสอบจะทํางานก่อนที่จะแสดงผล

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

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

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

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

flaky

บูลีน nonconfigurable; ค่าเริ่มต้นคือ False

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

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

shard_count

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

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

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

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

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

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

local

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

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

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

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

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

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

รายการสตริง ขึ้นอยู่กับ $(location) และ การแทนที่ "สร้างตัวแปร" และ การแปลงข้อมูลเป็นโทเค็น Bourne Shell; 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 ไม่ได้ใช้งานแล้ว สิ่งที่ไม่ควรทำ ให้ใช้สิ่งนี้

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

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

ตัวอย่างต่อไปนี้แสดงแหล่งที่มาที่แตกต่างกันสำหรับเป้าหมายที่แตกต่างกัน สถาปัตยกรรม กำลังเรียกใช้ 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() เลือก เช่น มาโครจะไม่สามารถเปลี่ยนแปลง พฤติกรรมโดยอิงตาม Branch ที่เลือก และ bazel query สามารถ ทำการคาดเดาอย่างระมัดระวังเกี่ยวกับทรัพยากร Dependency ที่กำหนดค่าได้ของเป้าหมายเท่านั้น ดูข้อมูลเพิ่มเติมเกี่ยวกับการใช้ select() กับกฎและมาโครได้ในคำถามที่พบบ่อยนี้

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

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

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

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

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

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

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

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