Я новичок в использовании Makefiles & я озадачен что-то ...Как вычисляются переменные Makefile?
У меня есть следующие в Makefile ...
USER_ID := $(id -u)
USER_ID_ESC := $$(id -u)
MAKEFILE := $(realpath $(lastword $(MAKEFILE_LIST)))
ROOT_DIR := $(dir $(MAKEFILE))
x:
echo $${USER_ID}
echo ${USER_ID}
echo $(USER_ID)
echo $${USER_ID_ESC}
echo ${USER_ID_ESC}
echo $(USER_ID_ESC)
echo $${ROOT_DIR}
echo ${ROOT_DIR}
echo $(ROOT_DIR)
exit 0
которые дают выход ...
echo ${USER_ID}
echo
echo
echo ${USER_ID_ESC}
echo $(id -u)
502
echo $(id -u)
502
echo ${ROOT_DIR}
echo /Users/toby/src/bitbucket.org/limtool/commissioning-tool-api/
/Users/toby/src/bitbucket.org/limtool/commissioning-tool-api/
echo /Users/toby/src/bitbucket.org/limtool/commissioning-tool-api/
/Users/toby/src/bitbucket.org/limtool/commissioning-tool-api/
exit 0
Я понимаю, использование от двойного $
, чтобы избежать использования $
, но я не понимаю, почему с помощью одного $
для realpath
& dir
команды работают, но использовать его для команды id
нет.
Может кто-нибудь помочь мне в понимании?
Благодаря
'realpath' и' dir' '' функции 'GNU make',' id' нет. Если вы хотите использовать функцию оболочки внутри Makefile, используйте '$ (shell id -u)'. 'realpath' и' sir' не экранированы, они корректно интерпретируются 'GNU make' – Tim
Спасибо @TimF Упоминайте, что в качестве ответа я могу принять? – TobyG
Несомненно, я сделал это и добавил несколько подробностей и ссылок :-) – Tim