W przypadku przypisania zmiennych w programie Make widzę: = i = operator. Jaka jest między nimi różnica?
W przypadku przypisania zmiennych w programie Make widzę: = i = operator. Jaka jest między nimi różnica?
Odpowiedzi:
Jest to opisane w dokumentacji GNU Make, w sekcji zatytułowanej 6.2 Dwa rodzaje zmiennych .
Krótko mówiąc, zmienne zdefiniowane za pomocą :=
są rozwijane raz, ale zmienne zdefiniowane za pomocą =
są rozwijane za każdym razem, gdy są używane.
make
główne zadanie) ma znacznie większy narzut niż takie wewnętrzne rozwiązywanie zmiennych.
:=
Proste wyrażenie przypisania jest oceniane tylko raz, przy pierwszym wystąpieniu. Na przykład, jeśli CC :=${GCC} ${FLAGS}
podczas pierwszego spotkania zostanie oszacowane, gcc -W
to za każdym razem ${CC}
zostanie zastąpione przez gcc -W
.
=
Wyrażenie przypisania rekurencyjnego jest oceniane za każdym razem, gdy zmienna zostanie napotkana w kodzie. Na przykład instrukcja podobna CC = ${GCC} {FLAGS}
zostanie oceniona tylko wtedy, gdy ${CC} file.c
zostanie wykonana akcja podobna . Jeśli jednak zmienna GCC
zostanie ponownie przypisana, tj.
GCC=c++
Wtedy ${CC}
zostanie przekonwertowana na c++ -W
po ponownym przypisaniu.
?=
Przypisanie warunkowe przypisuje wartość do zmiennej tylko wtedy, gdy nie ma ona wartości
+=
Załóżmy, że CC = gcc
wtedy operator dołączania jest używany tak, jak CC += -w
wtedy CC
ma wartośćgcc -W
Więcej informacji znajdziesz w tych samouczkach
Z http://www.gnu.org/software/make/manual/make.html#Flavors :
=
definiuje zmienną rozszerzaną rekurencyjnie. :=
definiuje zmienną po prostu rozszerzoną.