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

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

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

เนื้อหา

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

แอตทริบิวต์สตริงของบางกฎจะแบ่งออกเป็นหลายแอตทริบิวต์ ตามกฎการแปลงข้อมูลเป็นโทเค็นของ 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

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

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

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

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

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

licenses

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

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

srcs

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

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

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

แอตทริบิวต์ทั่วไปสำหรับกฎบิลด์ทั้งหมด

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

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

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

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

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

deprecation

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

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

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

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

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

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

distribs

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

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

exec_compatible_with

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

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

exec_properties

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

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

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

features

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

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

แอตทริบิวต์ 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_value วิ ที่ต้องแสดงในแพลตฟอร์มเป้าหมายเพื่อให้ เป้าหมายนี้ได้รับการพิจารณา ใช้งานร่วมกันได้ นอกเหนือจากข้อจำกัดใดๆ ที่แท็ก ประเภทกฎ หากแพลตฟอร์มเป้าหมายไม่ตรงตามข้อจำกัดที่ระบุไว้ทั้งหมด จะถือว่าเป้าหมายใช้ร่วมกันไม่ได้ เป้าหมายที่ใช้ร่วมกันไม่ได้คือ ข้ามสำหรับการสร้างและทดสอบเมื่อขยายรูปแบบเป้าหมาย (เช่น //..., :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

รายการป้ายกำกับ nonconfigurable; ค่าเริ่มต้นคือ default_visibility จาก แพ็กเกจ หากระบุ หรือ "//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" และใช้เพื่อป้อนข้อมูล สภาพแวดล้อมในการทดสอบ ผู้ให้บริการ

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

shard_count

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

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

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

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

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

โปรดดู ทดสอบชาร์ดดิ้ง ในสารานุกรมการทดสอบเพื่อดูรายละเอียดเกี่ยวกับการชาร์ดดิ้ง

local

บูลีน nonconfigurable; ค่าเริ่มต้นคือ 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" ซึ่งหมายความว่าค่าอาจเปลี่ยนแปลงเมื่อ เป้าหมายนั้นสร้างขึ้นในแบบต่างๆ โดยเฉพาะอย่างยิ่ง แอตทริบิวต์ที่กำหนดค่าได้ อาจแตกต่างกันไปตามค่าสถานะที่ส่งผ่านไปยังบรรทัดคำสั่ง 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 นี่คือเนมสเปซเป้าหมาย เป้าหมายไฟล์แต่ละรายการจะสอดคล้องกับ ลงในไฟล์จริงหนึ่งไฟล์บนดิสก์ ("เนมสเปซระบบไฟล์"); กฎแต่ละข้อ เป้าหมายอาจตรงกับ 0 หรือมีไฟล์จริงอย่างน้อย 1 ไฟล์ในดิสก์ อาจมีไฟล์ในดิสก์ที่ไม่มีเป้าหมายที่เกี่ยวข้อง สำหรับ ตัวอย่างเช่น ไฟล์ออบเจ็กต์ .o ไฟล์ที่สร้างขึ้นระหว่างการคอมไพล์ C++ ไม่สามารถอ้างอิงจากภายในไฟล์ BUILD หรือจากบรรทัดคำสั่ง ด้วยวิธีนี้ เครื่องมือสร้างอาจซ่อนรายละเอียดการใช้งานบางอย่างของ วิธีการทำงาน ซึ่งอธิบายโดยละเอียดเพิ่มเติมใน ข้อมูลอ้างอิงเกี่ยวกับแนวคิดของ BUILD