Что на самом деле должны означать $ (MAKE) или $ {MAKE} в языке сценариев make

su -pgsql изменяет пользователя на pgsql И изменяет текущий рабочий каталог (cwd) на домашний каталог pgsql.

Затем вы выполнили команду pg_dump в ~ pgsql / , поэтому искомый файл будет в этом каталоге: ~ pgsql / users.dump.out

0
11.03.2018, 02:02
2 ответа

Программа makeустанавливает переменную MAKE, которая может использоваться в make-файлах как $(MAKE)или ${MAKE}. Последнее полезно, потому что сценарии оболочки распознают этот синтаксис, и можно повторно использовать некоторые фрагменты сценария между ними.

Помимо этого, между синтаксисом shell/make не так много совпадений, поскольку makeобрабатывает такие вещи, как $$, иначе, чем shell.

Обращение к сути вопроса :переменная MAKEпомогает с рекурсией, так как программа на самом деле не может быть названа make(, например, gmake, pmake), и вам нужен этот бит информации, чтобы успешно повторяться в той же программе. Программа make(, однако она (re )с именем )), распознает эту рекурсию независимо от того, используется переменная или нет.

Дополнительная литература:Создание POSIX

0
28.01.2020, 02:43

$(MAKE)содержит путь к текущей программе make, если вы не перезапишете его.

Если вы просто вызываете makeили имя вашей реализации make, $(MAKE)должно содержать только это имя, так как ваша реализация make была вызвана через поиск PATH. Проверьте это, например. вызов:

cd /usr/bin
./make -f /dev/null | grep MAKE

Если вы вызываете свою реализацию make через абсолютный или относительный путь, $(MAKE)содержит абсолютный путь к вашей реализации make.

Это позволяет вам использовать $(MAKE)в ваших файлах make таким образом, что вы всегда будете вызывать одну и ту же программу make, даже если это временный двоичный файл, скомпилированный с отладочными сообщениями и установленный где угодно.

BTW :Вы можете получить начальное значение, установленное вашей программой make, вызвав:

$make -f /dev/null -p | grep MAKE
-1
28.01.2020, 02:43

Теги

Похожие вопросы