在Makefile中,%.o : %.c
是一种模式规则(Pattern Rule),用于定义如何从一个源代码文件(.c
文件)生成对应的编译目标文件(.o
文件)。这个规则表示的意思是:
- “%.o” 是目标文件的模式,其中的
%
是一个通配符,它可以匹配任何非空字符串。 - “%.c” 是依赖文件的模式,同样使用了
%
通配符。
当Makefile执行时,它会查找当前目录下所有与目标模式(.o
)匹配的文件,并寻找与其具有相同名字但扩展名为 .c
的文件作为依赖。例如,如果有文件 foo.c
,那么这条规则就会匹配 foo.o
,Make会根据这个规则编译 foo.c
生成 foo.o
。
下面是一个简单的例子:
Makefile
1%.o : %.c
2 gcc -c $^ -o $@
在这个例子中,规则告诉 Make,对于任何以 .c
结尾的源文件,都应该使用 gcc -c
命令编译生成对应的 .o
文件。其中 $<
代表第一个依赖(也就是 .c
文件),而 $@
代表目标文件(.o
文件)。当 Make 需要重建某个 .o
文件时,它会调用指定的命令来执行编译操作。
与其不同的是:下图中的mikefile文件则是每次编译所有的依赖.c文件,编译效率较低,而进阶的方式是先生成.o在通过.o文件生成目标文件。