我正在摆弄 makefile,我遇到了%.o或者%。C。据我了解,它指定了所有C或者哦文件。但为什么这有效:
%.o: %.c
$(CC) -c $^ -o $@
这不起作用
SOURCE := $(wildcard *.c)
$(SOURCE:.c=.o): SOURCE
$(CC) -c $^ -o $@
两个表达式都指定所有文件。所以呢%.o:make 文件中的符号有什么作用?
答案1
构造:
%.o: %.c
$(CC) -c $^ -o $@
是一个模式规则,这是一种隐式规则。它指定一目标和一$(CC)
依赖性,并导致每个目标调用一次。虽然这样:
SOURCE := $(wildcard *.c)
$(SOURCE:.c=.o): $(SOURCE)
$(CC) -c $^ -o $@
是一个标准规则,但它(可能)许多目标和许多依赖关系。然而尽管如此,它只会调用$(CC)
一次。
答案2
两个表达式都指定所有文件。
不,第一条规则告诉我们make
如何.o
在给定相应.c
文件的情况下获取文件。注意单数:单个文件。
第二条规则(声称)告诉如何在给定另一堆相应文件的情况下make
获取一堆文件。注意复数:由通配产生的所有文件。.o
.c
.c
*.c
附带说明一下,%.o: %c
是一个 GNU 扩展。
另一方面,您将不会学习如何使用make
StackOverflow。你应该考虑读一本书。