Щодо призначення змінних у 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 :
=
визначає рекурсивно-розширену змінну. :=
визначає просто розширену змінну.