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

รายงานปัญหา ดูซอร์สโค้ด รุ่น Nightly · 8.0 7.4 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) จะไม่มีผลต่อวิธีสร้างกราฟเป้าหมายและกราฟการดำเนินการ

จะเกิดอะไรขึ้นหากฉันต้องการเข้าถึง Structured Data เดียวกันทั้งก่อนและระหว่างระยะการดําเนินการ

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

ฉันควรเขียนเอกสารประกอบโค้ด Starlark อย่างไร

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

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