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

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

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

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

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 ) คุณจะประกาศอินพุตโดยรวมไว้ในส่วน runfiles แทนที่จะใช้ช่อง path ให้ใช้ File.short_path ซึ่งเป็นเส้นทางของไฟล์ที่เกี่ยวข้องกับ ไดเรกทอรี Runfiles ที่ไบนารีประมวลผล

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

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

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

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

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

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

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

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

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

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