这个Makefile .PHONY包含两个目标:clean和cleanx。 当我输入“make clean”或“make cleanx”时工作正常。但是,当我在命令行中“make”时,它就像“make clean”。 我希望“make”不应该做任何事情。必须有我误解了。你会解释一下发生了什么,以及在这种情况下如何让“make”无所作为? BTW,这个通用的makefile接受任何〜.c或〜.cpp文件(没有扩展名)并制作它们。
CC = gcc
CFLAGS = -x c -g -std=gnu99
# The following part of the makefile is generic. it can be used
# to build any executable just by changing the definition above
%: %.c
@echo Making $@.c file
$(CC) -o $@ $(CFLAGS) $<
%: %.cpp
@echo "Making $@.cpp file"
$(CC) -o $@ $(CFLAGS) $<
.PHONY: cleanx clean
cleanx:
rm -f *.exe *.o
clean:
rm -f *.o
提前完成! (债务人)&lt;&gt;&lt;
答案 0 :(得分:3)
Make始终运行makefile中定义的第一个显式目标,除非您在命令行上指定了特定目标。
在这种情况下,列出的第一个显式目标是cleanx
,因此如果您不提供任何参数,它将运行的内容。
如果您希望默认情况下运行不同的目标,请先定义该目标。
例如:
.PHONY: all
all:
.PHONY: cleanx clean
cleanx:
rm -f *.exe *.o
clean:
rm -f *.o
由于all
没有先决条件并且是PHONY,因此它不会做任何事情。