make: ปิดการใช้งานการสร้างแบบขนานในไดเร็กทอรีย่อยสำหรับเป้าหมายเดียวเท่านั้น

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

การสร้างและการทดสอบแบบขนาน (ผ่านตัวเลือก -j เพื่อสร้าง) ใช้ได้กับไดเร็กทอรีส่วนใหญ่ อย่างไรก็ตาม มีไดเร็กทอรีหนึ่งไดเร็กทอรีที่มีการทดสอบซึ่งจะไม่ทำงานเมื่อดำเนินการแบบขนาน (ความไวของไทม์มิ่ง) แต่จะผ่านเมื่อรันแบบอนุกรม

คำถามคือ: มีวิธีบังคับให้สร้างเป้าหมาย check ตามลำดับในไดเร็กทอรีย่อยเพียงไดเร็กทอรีเดียวในขณะที่สร้างอย่างอื่นแบบขนานหรือไม่


person arne    schedule 18.06.2013    source แหล่งที่มา
comment
เคล็ดลับเดียวที่ฉันคิดได้คือการแทรกการขึ้นต่อกันที่ผิดพลาดสำหรับการตรวจสอบซีเรียล คู่มือนี้มีแนวคิดพื้นฐาน   -  person Brett Hale    schedule 19.06.2013
comment
ทำไมไม่แก้ปัญหานี้ด้วยการทำให้เป้าหมายต้องพึ่งพาซึ่งกันและกัน?   -  person reinierpost    schedule 05.01.2015


คำตอบ (2)


ถ้าฉันเข้าใจคุณถูกต้อง เมื่อคุณรัน make recursive ที่สร้าง check เป้าหมาย คุณสามารถส่ง -j1 โดยเฉพาะได้ เพื่อให้แน่ใจว่ามันจะรันแบบอนุกรม:

check: ; $(MAKE) -j1 ...
person MadScientist    schedule 18.06.2013
comment
ฉันจะลองเมื่อฉันหาได้สองสามนาที - person arne; 19.06.2013
comment
สิ่งนี้ใช้งานไม่ได้: สิ่งนี้ทำให้ฉันมีคำเตือน: -jN บังคับในการสร้างย่อย - person Vincent Fourmond; 24.05.2014
comment
มันทำงานได้อย่างแน่นอน ใช่คุณจะได้รับคำเตือน แต่จะไม่ทำงานคู่ขนานกัน การใช้ NOTPARALLEL จะสะอาดกว่า หากคุณต้องการให้การเรียกใช้ makefile นั้นทุกครั้งไม่ขนานกัน (แทนที่จะเป็นเพียงการเรียกใช้เฉพาะที่เรียกใช้เป้าหมายเฉพาะ) และคุณสามารถเปลี่ยน makefile ได้ หากข้อใดข้อหนึ่งหรือทั้งสองข้อไม่เป็นความจริง แสดงว่า NOTPARALLEL มีประโยชน์น้อยกว่า - person MadScientist; 08.01.2015

เพิ่มใน Makefile ของคุณ:

.NOTPARALLEL:

ดูเอกสารประกอบของ GNU ที่นี่

person Anthony Scemama    schedule 04.01.2015