Что означает “$<" в Makefile?

Что означает $<

by itisgood

В Makefile я часто вижу “$<“. Что означает этот специальный символ и как его использовать?

Makefile – это текстовый файл, содержащий набор правил, определяющих, как собрать программу или набор файлов. Makefile используется утилитой make для автоматизации процесса сборки и управления зависимостями между файлами.
Утилита make читает Makefile и выполняет правила, чтобы собрать целевые файлы, которые могут быть исполняемыми, библиотеками или другими файлами.
Типичный Makefile состоит из набора правил, каждое из которых определяет, как собрать целевой файл.
Каждое правило состоит из (i) цели, (ii) списка зависимостей и (iii) набора команд, которые необходимо выполнить для сборки целевого файла.
Утилита make автоматически определяет порядок выполнения правил, основываясь на зависимостях между файлами.
Существует несколько предопределенных встроенных переменных, используемых make.
Одна из них – “$<“. Чтобы объяснить, что это такое, смотрите пример правила Makefile ниже.
foo.o: foo.c bar.h baz.h
     gcc -o $<

В этом правиле Makefile целевым файлом для сборки является foo.o, который зависит от трех файлов: foo.c, bar.h и baz.h.

Это означает, что если любой из этих файлов в списке зависимостей будет обновлен, make вызовет команду, указанную ниже, а именно “gcc -o $<“.

Так что же это за штука: “$<“?

В Makefile “$<” – это специальная переменная, которая представляет собой первую зависимость правила.

В этом примере foo.o зависит от трех файлов, и первая зависимость – foo.c.

Поэтому “$<” относится к foo.c.

Даже если у этого правила есть дополнительные зависимости, такие как bar.h и baz.h, “$<” все равно относится к foo.c, поскольку он представляет первую зависимость, указанную в правиле.

“$<” – это всего лишь одна из нескольких специальных переменных, которые могут использоваться в Make-файлах. Среди других часто используемых специальных переменных – “$@” (цель правила), “$^” (все зависимости правила) и “$*” (ножка цели, то есть часть перед расширением файла).

Точный набор специальных переменных, доступных в данном Make-файле, может зависеть от используемой версии Make и расширений или макросов, определенных в самом Make-файле.

см. также:

You may also like

Leave a Comment