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.
makegłó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 -Wto 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.czostanie wykonana akcja podobna . Jeśli jednak zmienna GCCzostanie ponownie przypisana, tj.
GCC=c++Wtedy ${CC}zostanie przekonwertowana na c++ -Wpo ponownym przypisaniu.
?=Przypisanie warunkowe przypisuje wartość do zmiennej tylko wtedy, gdy nie ma ona wartości
+=Załóżmy, że CC = gccwtedy operator dołączania jest używany tak, jak CC += -w
wtedy CCma 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ą.