Makefile中的%符号是什么意思


11

我正在使用makefile,遇到%.o%.c。据我了解,它指定所有co文件。但是为什么这样工作:

%.o: %.c
        $(CC) -c $^  -o $@  

这不起作用

SOURCE := $(wildcard *.c)

$(SOURCE:.c=.o): SOURCE
        $(CC) -c $^  -o $@

这两个表达式都指定所有文件。那么make文件中的%.o:符号做什么呢?

Answers:


9

这两个表达式都指定所有文件。

不,第一条规则告诉给定对应文件的情况下make如何获取文件。请注意单数:单个文件。.o.c

第二条规则(要求保护)告诉您make如何获得一堆.o文件(给定另一堆相应的.c文件)。请注意复数形式:所有.c文件都是由*.c遍历产生的。

附带说明的%.o: %c是GNU扩展。

另一方面,您将不会学习如何make在StackOverflow 上使用。您应该考虑读一本书。


RTFM,真的吗?我认为stackexchange的目的是清除这种心态。
daknowles

12

构造:

%.o: %.c
        $(CC) -c $^  -o $@  

模式规则,是隐式规则的一种。它指定一个目标和一个依赖关系,并$(CC)为每个目标引起一个调用。虽然这样:

SOURCE := $(wildcard *.c)

$(SOURCE:.c=.o): SOURCE
        $(CC) -c $^  -o $@

是一个标准规则,但是(可能)有许多目标和许多依赖关系。尽管如此,它只会调用$(CC)一次。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.