为什么makefile会在没有任何特定规则的情况下自动生成目标文件(* .o)?

时间:2016-01-18 16:18:50

标签: c makefile

我正在学习最近编写makefile。我正在阅读的所有文件都告诉我,我必须编写一条规则来执行命令。 但我发现以下Makefile可以生成没有任何编译命令的目标文件。为什么呢?

SOURCES=$(wildcard  src/*.c)
OBJECTS=$(patsubst %.c, %.o, $(SOURCES))

all: $(OBJECTS)

当我在终端输入make时,我得到了这个:

cc -c -o xxx.o xxx.c

怎么回事?

1 个答案:

答案 0 :(得分:5)

  

为什么makefile会在没有任何内容的情况下自动生成目标文件(* .o)   具体规则?

因为它有一套内置规则。

使用隐含规则,如下所示:

%.o: %.c  
    $(CC) $(CPPFLAGS) $(CFLAGS) -c

%: %.o    
    $(CC) $(LDFLAGS) n.o $(LOADLIBES) $(LDLIBS)

您可以使用make -p查看所有这些内容。虽然make -d显示了已应用的规则。

正如Ian Abbott在评论中指出的那样:

  

make -p需要从没有makefile的目录运行(和   没有Makefile,也没有GNUmake文件。)

另请参阅相关的GNU make documentation

post