#linux #macos #shell #unix #makefile
#linux #macos #оболочка #unix #makefile
Вопрос:
Недавно я начал изучать make / makefiles и некоторые связанные с ними концепции. К настоящему времени я создал несколько базовых версий с целями, зависимостями, действиями и т. Д. Однако я не смог понять, что такое автоматические переменные в этом контексте, их полезность или как их использовать.
Я провел много исследований по этой теме. Однако я не смог найти ни одного удовлетворительного материала. Кажется, что наиболее авторитетным источником информации является эта страница GNU. Однако я все еще не совсем понимаю, что такое автоматические переменные, какова их полезность или как я могу практически использовать их в своих make-файлах.
Мне интересно узнать, что это такое, какова их полезность и как я могу их практически использовать.
Комментарии:
1. Попробуйте отредактировать свой вопрос, чтобы он был более конкретным и кратким. Я думаю, у вас есть как минимум три вопроса, и каждый из них очень широкий.
2. @Jerry Я просто хочу объяснить, что это такое, какова их полезность и как я могу их практически использовать. Пример поможет проиллюстрировать эти идеи. Я не ищу чего-то очень сложного. Я просто новичок в этой концепции, который ищет разъяснений.
3. Я отредактировал OP с тем, что я указал в своем комментарии выше. Надеюсь, это даст разъяснения и конкретику.
Ответ №1:
Автоматические переменные — это просто переменные, для которых значение генерируется Make, а не должно задаваться явно.
Если вы посмотрите на существующие Make-файлы (выберите свой любимый проект с открытым исходным кодом!), Вы найдете множество практических примеров, которые помогут вам. Обычный выглядит примерно так:
%.o: %.c
gcc -c -o $@ $<
Это шаблонное правило, которое гласит: «чтобы создать файл с именем <something>.o
, которое зависит от <something.c>
, используйте команду gcc -c -o $@ $<
. $@
это автоматическая переменная, которая вычисляет цель правила, и $<
это автоматическая переменная, которая вычисляет первое условие правила. Эти автоматические переменные имеют решающее значение для такого рода шаблонных правил; они позволяют запускать make foo.o
или make bar.o
и подставлять соответствующие значения в командную строку. Например, если вы введете make foo.o
, Make попытается выполнить:
gcc -c -o foo.o foo.c
Или рассмотрим этот пример из git Makefile:
strip: $(PROGRAMS) git$X
$(STRIP) $(STRIP_OPTS) $^
Это используется для удаления символьной информации из объектных файлов. Он должен работать со всеми необходимыми условиями, поэтому он использует $^
, который вычисляет … разделенный пробелом список всех предварительных условий.