คำถามที่พบบ่อย

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

ต่อไปนี้คือปัญหาและคำถามที่พบบ่อยเกี่ยวกับการเขียนส่วนขยาย

เหตุใดไฟล์จึงไม่สร้าง / ไม่ได้ดำเนินการบางอย่าง

Bazel จะดำเนินการที่จำเป็นในการสร้างไฟล์เอาต์พุตที่ร้องขอเท่านั้น

  • หากไฟล์ที่ต้องการมีป้ายกำกับ คุณก็ขอไฟล์ดังกล่าวได้โดยตรงโดยทำดังนี้ bazel build //pkg:myfile.txt

  • หากไฟล์อยู่ในกลุ่มเอาต์พุตของเป้าหมาย คุณอาจต้องระบุกลุ่มเอาต์พุตนั้นในบรรทัดคำสั่ง: bazel build //pkg:mytarget --output_groups=foo

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

ดูข้อมูลเพิ่มเติมได้ที่หน้ากฎ

ทำไมระบบจึงไม่เรียกใช้ฟังก์ชันการใช้งานของฉัน

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

ไฟล์หายไปเมื่อเรียกใช้การดำเนินการหรือไบนารีของฉัน

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

สำหรับการดำเนินการ คุณจะประกาศอินพุตโดยส่งไปยังฟังก์ชัน ctx.actions.* ที่สร้างการดำเนินการ คุณดูเส้นทางที่เหมาะสมสำหรับไฟล์ได้โดยใช้ File.path

สำหรับไบนารี (เอาต์พุตที่เรียกใช้ได้ซึ่งเรียกใช้โดยคำสั่ง bazel run หรือ bazel test) คุณจะประกาศอินพุตโดยรวมอินพุตไว้ใน Runfile แทนที่จะใช้ช่อง path ให้ใช้ File.short_path ซึ่งเป็นเส้นทางของไฟล์ที่เกี่ยวข้องกับไดเรกทอรี Runfiles ที่ไบนารีดำเนินการ

ฉันจะควบคุมไฟล์ที่ bazel build //pkg:mytarget สร้างได้อย่างไร

ใช้ผู้ให้บริการ DefaultInfo เพื่อตั้งค่าเอาต์พุตเริ่มต้น

ฉันจะเรียกใช้โปรแกรมหรือทำ I/O ไฟล์เป็นส่วนหนึ่งของบิลด์ได้อย่างไร

สามารถประกาศเครื่องมือเป็นเป้าหมายได้เช่นเดียวกับส่วนอื่นๆ ของบิลด์ และเรียกใช้ในระหว่างขั้นตอนการดำเนินการเพื่อช่วยสร้างเป้าหมายอื่นๆ หากต้องการสร้างการดำเนินการที่เรียกใช้เครื่องมือ ให้ใช้ ctx.actions.run และส่งในเครื่องมือเป็นพารามิเตอร์ executable

ในระหว่างขั้นตอนการโหลดและการวิเคราะห์ เครื่องมือไม่สามารถทำงานหรือดำเนินการ I/O ไฟล์ได้ ซึ่งหมายความว่าเครื่องมือและเนื้อหาไฟล์ (ยกเว้นเนื้อหาของไฟล์ BUILD และ .bzl) จะไม่มีผลต่อวิธีสร้างกราฟเป้าหมายและกราฟการดำเนินการ

ฉันควรทำอย่างไรหากจำเป็นต้องเข้าถึงข้อมูลที่มีโครงสร้างเดียวกันทั้งก่อนและในระหว่างระยะการดำเนินการ

คุณจัดรูปแบบข้อมูลที่มีโครงสร้างเป็นไฟล์ .bzl ได้ คุณสามารถload()ไฟล์เพื่อเข้าถึงไฟล์ดังกล่าวระหว่างขั้นตอนการโหลดและการวิเคราะห์ คุณสามารถส่งเป็นอินพุตหรือรันไฟล์ไปยังการดำเนินการและไฟล์ปฏิบัติการที่ต้องใช้ข้อมูลดังกล่าวในระยะการดำเนินการได้

ฉันควรบันทึกรหัส Starlark อย่างไร

สำหรับกฎและแอตทริบิวต์กฎ คุณจะส่งลิเทอรัลเป็นเอกสาร (อาจมีเครื่องหมายคำพูด 3 รายการ) ไปยังพารามิเตอร์ doc ของ rule หรือ attr.*() ได้ สำหรับฟังก์ชันและมาโครตัวช่วย ให้ใช้ลิงก์สตริงเอกสารที่มีเครื่องหมายคำพูด 3 ตัวตามรูปแบบที่ให้ไว้ที่นี่ โดยทั่วไปแล้ว ฟังก์ชันการใช้กฎไม่จำเป็นต้องมีสตริงเอกสารของตัวเอง

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