`%`字符在GNU Make中有什么作用?

时间:2010-12-15 15:37:44

标签: gnu-make

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

%是什么意思?

以下规则将采取什么措施:

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

谢谢,

-AD

1 个答案:

答案 0 :(得分:2)

规则:

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

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

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

此处$@=fred.o$<=fred.c同样

fred.o: fred.c george.c
    gcc $< -o:$@

提供$@=fred.o$<=fred.c george.c

编辑:从我将扩展的命令开始。

%将匹配与其相关的所有内容。所以%.c表示当前目录中的所有.c文件。 asm/%.asm表示带有.asm扩展名的subdir asm中的所有文件。它就像一个令牌,因此无论何时下次使用%,即在标签中,都会使用所发现的任何内容。

所以,规则:

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

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