В чем смысл знака двойного доллара в bash/Makefile?
При вставке оболочки script внутри Makefile мы имеем (?), чтобы использовать знак двойного доллара ($$), чтобы ссылаться на переменные. Почему это так?
for number in 1 2 3 4 ; do \
echo $$number ; \
done
Переменные и ссылки функций в рецептах имеют одинаковый синтаксис и семантика к ссылкам в другом месте в файле makefile. Они также имеют те же правила цитирования: если вы хотите, чтобы в вашем рецепт, вы должны удвоить его ('$$). Для оболочек, таких как оболочка по умолчанию, которые используют знаки доллара для введения переменных, важно сохранить ясно, что переменная, которую вы хотите использовать, - это сделать переменную (использовать один знак доллара) или переменную оболочки (использовать две долларовые знаки).
Короче говоря:
makefile variable = > использовать один знак доллара
shell variable = > использовать два знака доллара
Ответ 2
При включенном вторичном расширении make может также интерпретировать сам двойной доллар на втором этапе обработки. (Первая фаза: чтение файла, установка переменных; вторая фаза: поиск и вызов целей зависимости, выполнение правил)
Это позволяет динамически указывать цели зависимостей, когда переменная с именем цели доступна только позже в файле.