c - 尽管进行了更改,为什么 Makefile 认为它是最新的?

标签 c makefile

C 生成文件

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

我有以下 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

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

最佳答案

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/

相关文章:

c - 带有多个定界符的 strtok

macos - 在 OS X 上使用 'make'

ubuntu - 如何为 tesseract 创建 .deb 包?

c - 用 C 检测网络事件

检查是否设置了特定位

c - 如何使用 C 在 gtk 中获取笔记本的子项

C - 如何创建一个全局数组,其大小是函数的整数结果?

c - 使用不带 makefile 的 make 命令?

c - 需要帮助编写一个将所有目标文件创建到新子目录中的 Makefile

c++ - 之前缺少模板参数