我最近将我的 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
or-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
才能让它再次自动处理依赖关系?