ฉันเพิ่งอัปเกรดการติดตั้ง Ubuntu จาก Jaunty เป็น Karmic เห็นได้ชัดว่ารวมถึงการอัปเดตคอมไพเลอร์ GNU C ด้วย เนื่องจากโค้ดที่คอมไพล์ก่อนหน้านี้ไม่มีอีกต่อไป
การรัน cc 4.4.1 (Ubuntu 4.4.1-4ubuntu8) ตอนนี้สร้างข้อผิดพลาดต่อไปนี้ในโค้ดที่ทำงานได้ดีใน cc 4.3.3 (Ubuntu 4.3.3-5ubuntu4):
$ make
cc -c -MMD -MG -MP -MF lex.d -g -Wall -O -o lex.o lex.c
cc1: error: -MG may only be used with -M or -MM
การเพิ่มแฟล็ก -M
หรือ -MM
ทำให้เกิดข้อความต่อไปนี้:
[...]
flex -o lex.c lex.l
cc -c -MM -MG -MP -MF lex.d -g -Wall -O -o lex.o lex.c
[...]
cc -g -Wall -O -o translate lex.o grammar.tab.o main.o list.o salloc.o suffixed.o expr.o emit.o optimize.o -lfl
lex.o: file not recognized: File truncated
collect2: ld returned 1 exit status
make: *** [translate] Error 1
ฉันได้รับแจ้งว่า -Mx
บอกแฟล็ก make
ว่าไฟล์ c ต่างๆ ขึ้นอยู่กับไฟล์ .h
อย่างไร การแก้ไขที่ดีที่สุดของฉันจนถึงตอนนี้คือการบอก make
อย่างชัดเจนว่าไฟล์ .c
ทั้งหมดขึ้นอยู่กับไฟล์ .h
ทั้งหมด เพื่อให้แน่ใจว่าทุกอย่างเป็นข้อมูลล่าสุด อย่างไรก็ตาม สิ่งนี้ทำให้เกิดงานที่ไม่จำเป็นจำนวนมากในขณะคอมไพล์
คำถามของฉันคือ: ฉันจะต้องปรับแฟล็กสำหรับ cc
เพื่อให้จัดการการขึ้นต่อกันโดยอัตโนมัติอีกครั้งได้อย่างไร