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

รายงานปัญหา ดูแหล่งที่มา Nightly {20/4} /20} {3/4} {3/4} {3/4} {3/4} {3/20}/3} {3/20}/3}

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

เนื้อหา

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

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

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

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

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

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

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

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

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

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

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

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

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

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

deps

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

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

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

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

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

licenses

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

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

srcs

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

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

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

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

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

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

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

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

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

deprecation

สตริง nonconfigurable ค่าเริ่มต้นคือ None

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

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

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

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

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

distribs

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

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

exec_compatible_with

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

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

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 และ 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 เท่านั้น แท็กนี้จะมีผลก็ต่อเมื่อเปิดใช้แซนด์บ็อกซ์เท่านั้น
  • requires-fakeroot เรียกใช้การทดสอบหรือการดำเนินการเป็น uid และ gid 0 (ผู้ใช้ระดับรูท) ฟีเจอร์นี้รองรับเฉพาะใน Linux แท็กนี้จะมีลำดับความสำคัญเหนือตัวเลือกบรรทัดคำสั่ง --sandbox_fake_username

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

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

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

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

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

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

testonly

บูลีน nonconfigurable ค่าเริ่มต้นคือ False ยกเว้นเป้าหมาย Test Suite และ Test Suite

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

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

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

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

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

toolchains

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

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

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

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

visibility

รายการป้ายกำกับ nonconfigurable ค่าเริ่มต้นคือ default_visibility จาก package หากระบุ หรือ "//visibility:private"

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

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

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

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

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

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

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

env

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

ระบุตัวแปรสภาพแวดล้อมเพิ่มเติมที่จะตั้งค่าเมื่อทำการทดสอบโดย 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 นาที)
medium 100 1 ปานกลาง (5 นาที)
ใหญ่ 300 1 ยาว (15 นาที)
มหึมา 800 1 ตลอดกาล (60 นาที)

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

timeout

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

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

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

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

สำหรับเวลาอื่นๆ นอกเหนือจากที่กล่าวมาข้างต้น คุณจะลบล้างการหมดเวลาของการทดสอบได้ด้วยแฟล็ก Bazel ของ --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) และ "Makeตัวแปร" และการแปลงข้อมูลเป็นโทเค็นของ Bourne Shell nonconfigurable ค่าเริ่มต้นคือ []

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

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

env

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

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