C生成文件
这个问题有一个近似的重复,但我仍然不能解决我的问题。
我有以下生成文件:

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

我试图通过改变标志来编译不同的优化级别。但是当我试着做的时候,我被告知“山”是最新的?我错过了什么?谢谢。

最佳答案

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

关于c - 为什么尽管进行了更改,Makefile仍认为它是最新的?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15593837/

10-11 07:47