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

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

เนื้อหา

การแปลงข้อมูล Bourne Shell

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

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

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

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

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

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

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

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

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

List of labels ; optional

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

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

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

deps

List of labels ; optional

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

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

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

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

licenses

List of strings; optional; nonconfigurable

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

srcs

List of labels ; optional

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

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

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

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

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

List of labels ; optional; nonconfigurable

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

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

deprecation

String; optional; nonconfigurable

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

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

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

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

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

distribs

List of strings; optional; nonconfigurable

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

exec_compatible_with

List of labels ; optional; nonconfigurable

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

exec_properties

Dictionary of strings; optional

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

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

features

List of feature strings; optional

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

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

restricted_to

List of labels ; optional; nonconfigurable

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

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

tags

List of strings; optional; nonconfigurable

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

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

List of labels ; optional

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

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

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

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

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

testonly

Boolean; optional; default False except for test and test suite targets; nonconfigurable

หากเป็น "จริง" จะมีเพียงเป้าหมาย testonly (เช่น การทดสอบ) เท่านั้นที่ขึ้นอยู่กับเป้าหมายนี้

ในทำนองเดียวกัน กฎที่ไม่ใช่ testonly ไม่อนุญาตให้ อิงตามกฎใดๆ ที่เป็น testonly

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

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

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

toolchains

List of labels ; optional; nonconfigurable

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

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

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

visibility

List of labels ; optional; default default_visibility from package if specified, or //visibility:private otherwise; nonconfigurable

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

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

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

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

List of strings; optional; subject to $(location) and "Make variable" substitution, and Bourne shell tokenization

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

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

env

Dictionary of strings; optional; values are subject to $(location) and "Make variable" substitution

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

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

env_inherit

List of strings; optional

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

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

size

String "enormous", "large" "medium" or "small", default is "medium"; optional; nonconfigurable

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

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

String "short", "moderate", "long", "eternal" (with the default derived from the test's size attribute); nonconfigurable

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

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

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

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

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

flaky

Boolean; optional; default False; nonconfigurable

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

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

shard_count

Non-negative integer less than or equal to 50; optional

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

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

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

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

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

local

Boolean; default False; nonconfigurable

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

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

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

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

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

List of strings; optional; subject to $(location) and "Make variable" substitution, and Bourne shell tokenization; nonconfigurable

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

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

env

Dictionary of strings; optional; values are subject to $(location) and "Make variable" substitution

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

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

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

output_licenses

List of strings; optional

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

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

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