Щодо призначення змінних у Make, я бачу: = та = оператор. Яка різниця між ними?
Щодо призначення змінних у Make, я бачу: = та = оператор. Яка різниця між ними?
Відповіді:
Це описано в документації GNU Make у розділі 6.2 Дві різновиди змінних .
Коротше кажучи, змінні, визначені за допомогою :=, розширюються один раз, але змінні, визначені за допомогою =, розширюються щоразу, коли їх використовують.
makeосновна робота) має набагато більші накладні витрати, ніж розпізнавання внутрішньої змінної.
:=Простий вираз присвоєння оцінюється лише один раз, при першій появі. Наприклад, якщо CC :=${GCC} ${FLAGS}під час першої зустрічі оцінюється до, gcc -Wто кожен раз, коли ${CC}це відбувається, вона буде замінена на gcc -W.
=Вираз рекурсивного призначення обчислюється кожного разу, коли в коді зустрічається змінна. Наприклад, оператор like CC = ${GCC} {FLAGS}оцінюється лише тоді, коли ${CC} file.cвиконується дія like . Однак, якщо змінна GCCперепризначена, тобто
GCC=c++тоді ${CC}буде перетворено на c++ -Wпісля перепризначення.
?=Умовне присвоєння присвоює змінній значення, лише якщо вона не має значення
+=Припустимо, що CC = gccтоді використовується оператор, що додається, як CC += -w
тоді, коли CCмає значенняgcc -W
Для отримання додаткової інформації перегляньте ці посібники
З http://www.gnu.org/software/make/manual/make.html#Flavors :
=визначає рекурсивно-розширену змінну. :=визначає просто розширену змінну.