使参数传递和多个.PHONY目标

时间:2015-01-25 16:43:55

标签: makefile gnu-make argument-passing

这个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;

1 个答案:

答案 0 :(得分:3)

Make始终运行makefile中定义的第一个显式目标,除非您在命令行上指定了特定目标。

在这种情况下,列出的第一个显式目标是cleanx,因此如果您不提供任何参数,它将运行的内容。

如果您希望默认情况下运行不同的目标,请先定义该目标。

例如:

.PHONY: all
all:

.PHONY: cleanx clean
cleanx: 
        rm -f *.exe *.o
clean:
        rm -f *.o

由于all没有先决条件并且是PHONY,因此它不会做任何事情。