Что символ `%` делает в GNU Make? - PullRequest
2 голосов
/ 15 декабря 2010

Я использую GNU make.В Makefile, который я получил, я вижу символ "%".например, в контексте% .c,% .asm,% .o и т. д. (это подстановочный знак, который вернет все файлы с таким расширением)

Что означает%?

Что будет делать следующее правило:

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

спасибо,

-AD

1 Ответ

2 голосов
/ 15 декабря 2010

Правило:

%.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.

...