Makefile中的%符号是什么意思

Mer*_*ero 16 make gnu-make

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

%.o: %.c
        $(CC) -c $^  -o $@  
Run Code Online (Sandbox Code Playgroud)

这不起作用

SOURCE := $(wildcard *.c)

$(SOURCE:.c=.o): SOURCE
        $(CC) -c $^  -o $@
Run Code Online (Sandbox Code Playgroud)

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

Ste*_*uch 18

构造:

%.o: %.c
        $(CC) -c $^  -o $@  
Run Code Online (Sandbox Code Playgroud)

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

SOURCE := $(wildcard *.c)

$(SOURCE:.c=.o): SOURCE
        $(CC) -c $^  -o $@
Run Code Online (Sandbox Code Playgroud)

是一个标准规则,但它(可能)有许多目标和许多依赖项。然而,对于所有这些,它只会调用$(CC)一次。


Sat*_*ura 8

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

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

第二条规则(声称)告诉make如何获取一堆.o文件,给定另一堆相应的.c文件。注意复数:所有.c*.c通配符产生的文件。

附带说明一下,%.o: %c是 GNU 扩展。

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

  • RTFM,真的吗?我认为 stackexchange 的目的是清除这种心态。 (4认同)