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

make argument passing and multiple .PHONY targets

这个 Makefile .PHONY 包含两个目标:clean 和 cleanx。 当我输入 "make clean" 或 "make cleanx" 时工作正常。但是,当我在命令行中执行 "make" 时,它的行为就像 "make clean"。 我预计 "make" 不应该做任何事情。一定是我理解错了。您能否解释一下发生了什么以及如何让 "make" 在这种情况下什么都不做? 顺便说一句,这个通用的 makefile 接受任何 ~.c 或 ~.cpp 文件(w/o 扩展名)并制作它们。

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 

提前致谢! (债务人)<><

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

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

如果你想让它默认运行一个不同的目标,先定义那个。

例如:

.PHONY: all
all:

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

这里因为 all 没有先决条件并且是 PHONY,所以它不会做任何事情。