我正在使用GNU make。在我得到的Makefile中,我看到符号'%'。例如在...的背景下 %.c,%。asm,%.o等..(它是一个通配符,将返回该扩展名的所有文件)
%是什么意思?
以下规则将采取什么措施:
%.o: %.c
gcc $< -o:$@
谢谢,
-AD
答案 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.S
,arch/bye.S
,arch/somethingelse.S
将创建obj/asm/hello.o
,obj/asm/bye.S
,obj/asm/somethingelse.o
。