11 我正在使用makefile,遇到%.o或%.c。据我了解,它指定所有c或o文件。但是为什么这样工作: %.o: %.c $(CC) -c $^ -o $@ 这不起作用 SOURCE := $(wildcard *.c) $(SOURCE:.c=.o): SOURCE $(CC) -c $^ -o $@ 这两个表达式都指定所有文件。那么make文件中的%.o:符号做什么呢? make gnu-make — 梅罗 source
9 这两个表达式都指定所有文件。 不,第一条规则告诉给定对应文件的情况下make如何获取文件。请注意单数:单个文件。.o.c 第二条规则(要求保护)告诉您make如何获得一堆.o文件(给定另一堆相应的.c文件)。请注意复数形式:所有.c文件都是由*.c遍历产生的。 附带说明的%.o: %c是GNU扩展。 另一方面,您将不会学习如何make在StackOverflow 上使用。您应该考虑读一本书。 — 佐藤桂 source RTFM,真的吗?我认为stackexchange的目的是清除这种心态。 — daknowles
12 构造: %.o: %.c $(CC) -c $^ -o $@ 是模式规则,是隐式规则的一种。它指定一个目标和一个依赖关系,并$(CC)为每个目标引起一个调用。虽然这样: SOURCE := $(wildcard *.c) $(SOURCE:.c=.o): SOURCE $(CC) -c $^ -o $@ 是一个标准规则,但是(可能)有许多目标和许多依赖关系。尽管如此,它只会调用$(CC)一次。 — 斯蒂芬·劳奇 source