Правило:
%.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 с расширением .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
.