尽管做出了改变,为什么Makefile认为它是最新的?

时间:2013-03-24 00:44:07

标签: c makefile

C Makefile

这个问题有一个密切的重复,但我仍然无法解决我的问题。

我有以下Makefile:

CFLAGS0 = 
CFLAGS1 = -O1
CFLAGS2 = -O2
CFLAGS3 = -O3
CFLAGS4 = -O4

mountain:   timer.o mountain.o
    gcc -o mountain timer.o mountain.o

timer.o: timer.c timer.h
    gcc -c -O2 timer.c       

mountain.o: mountain.c timer.h
    gcc -c $(CFLAGS1) mountain.c   #I'm trying to make changes here

clean:
    rm *.o mountain

我正在尝试通过更改标志来编译不同的优化级别。但是当我试图制作时,我被告知'山'是最新的?我错过了什么?感谢。

1 个答案:

答案 0 :(得分:3)

makefile查看每个配方的源的修改时间,以确定它们是否应该更改。如果您正在更改makefile本身,它将不会注意到。但你可以在每个食谱的基础上告诉它:

mountain.o: mountain.c timer.h Makefile
    gcc -c $(CFLAGS1) mountain.c

显然,如果你的makefile被命名为不同的东西,你将不得不改变它以匹配。

此外,如果你正在使用GNU Make,你可以告诉它总是认为特定的配方过时了。但你应该避免这种情况,因为它删除了make的主要优化;

.phony : mountain.o
mountain.o: mountain.c timer.h
    gcc -c $(CFLAGS1) mountain.c

这适用于抽象规则,例如clean