通过MakeFiles时,我发现当命名为目标的文件即使不使用.PHONY时也存在,目标正在建立。 但是,当我对另一个目标进行相同的处理时,即清理时,目标没有建立起来,并说“清理是最新的”,这是可以的。 我只想知道当文件存在于当前目录时为什么另一个目标正在建立。如果在当前目录中已经存在名为目标的文件时没有.PHONY目标
生成文件:
CC:= gcc
CCFLAGS:=-Wall -Wextra
hello: hellomake.o hellofunc.o
$(CC) $(CCFLAGS) hellomake.c hellofunc.c -o file
hellomake.o : hellomake.c
$(CC) $(CCFLAGS) -c hellomake.c
hellofunc.o : hellofunc.c
$(CC) $(CCFLAGS) -c hellofunc.c
clean:
rm -rf *.o
rm -rf file
我的当前目录下的文件已命名相同的目标,如 “你好”。 它应该给结果为“你好达最新的”,但它没有这样做,并给输出: 让你好
gcc -Wall -Wextra hellomake.c hellofunc.c -o file
请告诉这是为什么构建目标时目标不.phony和作为目标命名的文件已经存在于当前目录中。
如果'hellomake.c'或'hellofunc.c'比最新'hello'它会重建。运行'make hello'两次,你可以在第二次看到它会给你好是uptodate – 2014-09-02 08:41:20
'我只是想知道为什么当文件存在于当前目录时,其他目标正在建立'你应该检查目标是否重建即使依赖关系没有被修改。 – 2014-09-02 08:42:50
创建了我在makefile中使用的文件后,我在我的目录中创建了“hello”文件。但即使没有.PHONY,makefile也不会给出任何错误。通常,当与目标名称相同的文件存在于当前目录中时,它不应该运行目标的命令,不使用.PHONY,但在我的情况下,它是这样做的。 :) – Mayank 2014-09-02 12:50:17