ฉันกำลังพยายามรวมระบบบิลด์สองระบบเข้าด้วยกัน ทั้งสองแบบเป็นแบบเรียกซ้ำ (กฎใน makefile ใช้ make เพื่อเรียก makefiles อื่น ๆ เพื่อสร้างส่วนประกอบของโครงการ)
ฉันจะเรียกพวกเขาว่า 'A' และ 'B' โดยที่ 'A' สร้างแอปพลิเคชันและ 'B' สร้างไลบรารีที่ 'A' ใช้
makefile ระดับบนสุดในการเรียก A 'make TARGET=whatever' ซึ่งหมายความว่าบิตที่เรียกใช้ซ้ำทั้งหมดของ build สืบทอดค่าของ TARGET เป็นตัวแปรแบบอ่านอย่างเดียว รวมถึงระบบ build จาก B ซึ่งถูกเรียกว่าเป็นส่วนหนึ่งของ โครงสร้างแบบเรียกซ้ำ
ฉันไม่ต้องการให้สิ่งนี้เกิดขึ้นในระบบบิลด์สำหรับ 'B' (ซึ่งมาจากโปรเจ็กต์อื่น) เนื่องจาก makefiles ที่นั่นใช้ TARGET เพื่อจุดประสงค์ของตนเองและบิลด์ล้มเหลวเนื่องจาก TARGET มีค่าผิดและเป็นแบบอ่านอย่างเดียว
ฉันมองเห็นวิธีแก้ปัญหานี้ได้เพียงสองวิธีเท่านั้น ซึ่งทั้งสองวิธีนั้นไม่สามารถทำได้
1) เปลี่ยนชื่อ TARGET เป็นอย่างอื่นใน makefile ใน A ที่ตั้งค่าและใน makefile ใน A ที่ใช้มัน เพื่อหลีกเลี่ยงการปะทะกับระดับล่างของระบบ build
2) ใช้คำสั่ง 'แทนที่' ทุกที่ใน makefiles ใน B ซึ่งมีการตั้งค่าตัวแปร TARGET เพื่อแทนที่สถานะอ่านอย่างเดียว
ใครมีความคิดที่ดีกว่านี้บ้างไหม? - โดยหลักการแล้ว ฉันต้องการให้ ไม่มีอะไร ได้รับการสืบทอดโดยระบบการสร้างของ B จาก A ยกเว้นตัวเลือกเหล่านั้นที่ฉันส่งผ่านไปยังระบบการสร้าง B จาก A อย่างชัดเจน
บังเอิญฉันใช้ GNU Make v3.80