Makefile中的%符号是什么意思

Makefile中的%符号是什么意思

我正在摆弄 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 扩展。

另一方面,您将不会学习如何使用makeStackOverflow。你应该考虑读一本书。

相关内容