GNU Make 中的“%”字符有什么作用?

发布于 2024-10-07 22:42:18 字数 211 浏览 2 评论 0原文

我正在使用 GNU make。在我得到的 Makefile 中,我看到符号“%”。例如在上下文中 %.c、%.asm、%.o 等。(这是一个通配符,将返回该扩展名的所有文件)

% 是什么意思?

下面的规则会做什么:

%.o:  %.c
  gcc $< -o:$@

谢谢,

-AD

I am using GNU make. In a Makefile that I got, i see the symbol '%'. e.g. in context of
%.c, %.asm , %.o etc.. (Is it a wildcard that will return all the files of that extension)

What does % mean?

What will the below rule do:

%.o:  %.c
  gcc 
lt; -o:$@

thank you,

-AD

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

就像说晚安 2024-10-14 22:42:18

规则:

%.o:  %.c
    gcc 
lt; -o:$@

将使用下面的命令为每个 c 文件构建一个目标文件。所以是的,% 就像一个通配符,但我倾向于将其视为“对于每个”,因为这就是规则的结果。 $< 表示依赖文件,$@ 表示要构建的对象。如果您这样做:

fred.o: fred.c
    gcc 
lt; -o:$@

这里 $@=fred.o$<=fred.c 同样

fred.o: fred.c george.c
    gcc 
lt; -o:$@

给出 $@=fred.o$<=fred.c george.c

编辑:从命令中我将对此进行扩展。

% 将匹配与其周围匹配的所有内容。所以 %.c 表示当前目录下的所有 .c 文件。 asm/%.asm 表示子目录asm 中所有扩展名为.asm 的文件。它的作用就像一个令牌,因此每当您下次在标签中使用 % ie 时,都会使用找到的任何内容。

因此,规则:

objs/asm/%.o: arch/%.S
     nasm -felf64 
lt; -o $@

给定 arch/hello.Sarch/bye.Sarch/somethingelse.S 将创建 obj /asm/hello.oobj/asm/bye.Sobj/asm/somethingelse.o

The rule:

%.o:  %.c
    gcc 
lt; -o:$@

Will for each c file build an object file using the command below it. So yes, % is like a wildcard, but I tend to think of it as "for each" because that's what happens as a result of the rule. $< means dependent files and $@ means the object to be built. If you did this:

fred.o: fred.c
    gcc 
lt; -o:$@

Here $@=fred.o and $<=fred.c Likewise

fred.o: fred.c george.c
    gcc 
lt; -o:$@

gives $@=fred.o and $<=fred.c george.c.

Edit: from the commands I shall expand on this.

% will match everything matching that around it. So %.c means all the .c files in the current directory. asm/%.asm means all the files in the subdir asm with the .asm extension. It acts like a token, so whatever is found will be used whenever you next use % i.e. in the label.

So, the rule:

objs/asm/%.o: arch/%.S
     nasm -felf64 
lt; -o $@

Given arch/hello.S, arch/bye.S, arch/somethingelse.S will create obj/asm/hello.o, obj/asm/bye.S, obj/asm/somethingelse.o.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文