jaka jest różnica robocza w poniższych instrukcjach?Jaka jest różnica między: = i + = w pliku make?
LDDIRS := -L$(ORACLE_LIB)
LDDIRS += -L$(ORACLE_LIB)
jaka jest różnica robocza w poniższych instrukcjach?Jaka jest różnica między: = i + = w pliku make?
LDDIRS := -L$(ORACLE_LIB)
LDDIRS += -L$(ORACLE_LIB)
:=
definiuje zmienna tutaj być lewa strona, +=
dodaje prawej strony do istniejącej wartości zmiennej. Porównaj :=
z =
który ocenia po prawej stronie w miejscu stosowania (a nie w tej konkretnej linii)
Możesz zajrzeć na ręcznym here (Zakładając, że używasz GNU make)
:=
jest do przypisania, w taki sam sposób, jak =
.
+=
dodać nową wartość do zmiennej.
: = i = są takie same? To bluźnierstwo! – shikhanshu
Od This website
dla składni :=
Link to place on page
Wystarczy piankowa zmienne są zdefiniowane przez linie wykorzystujących „=” (patrz Ustawianie zmiennych). Wartość po prostu rozwiniętej zmiennej jest skanowana raz na zawsze, rozszerzając wszelkie odniesienia do innych zmiennych i funkcji, gdy zmienna jest zdefiniowana. Rzeczywista wartość po prostu rozwiniętej zmiennej jest wynikiem rozszerzenia tekstu, który piszesz. Nie zawiera żadnych odniesień do innych zmiennych; zawiera ich wartości od momentu zdefiniowania tej zmiennej.
dla składni +=
Link to place on page
Kiedy zmienna ten nie został określony wcześniej, „+ =” działa tak, jak normalne „=” określa zmienną rekurencyjnie-rozszerzonego. Jeśli jednak istnieje poprzednia definicja, to dokładnie to, co "+ =" zależy od tego, jaki smak zdefiniowanej zmiennej pierwotnie. Zobacz "Dwa smaki zmiennych", aby objaśnić dwa smaki zmiennych.
:=
będzie ustawić wartość raz do zmiennej, to znaczy przyzwyczajenie zostać poddane ponownej ocenie za każdym razem sprawiają, że encouters zmiennej. Może znacząco poprawić wydajność podczas kompilowania kodu.
+=
po prostu doda wartość do zmiennej.
: = (Wystarczy Expanded Variable) Wartość jest skanowany raz na zawsze rozszerza żadnych
odniesień do innych zmiennych i funkcji, gdy zmienna jest zdefiniowana. na przykład x:=foo
y:=$(x) bar
x:=later
więc powyżej odpowiada
y:=foo bar
x:=later
+ = służy do dołączania więcej tekstu zmiennych np
objects=main.o foo.o bar.o
objects+=new.o
który ustawi obiektów do 'main.o foo.o bar.o new.o'
= jest rekurencyjnie rozszerzonym wartości variable.The jest zainstalowanie verbatim; jeśli zawiera odniesienie do innych zmiennych, zmienne te są rozszerzane, gdy zmienna ta jest zmieniona na . Jest to znane jako ekspansja rekurencyjna.
"=" służy do definiowania rekurencyjnie rozwiniętej zmiennej. Follow zrobić plik wydrukować „y jest później bar”
x = foo
y = $(x) bar
x = later
all:;echo "y is" $(y)
„: =” jest do definiowania prostu rozszerzoną zmienną, która jest rozszerzoną raz na zawsze. Poniżej zrobić plik wydrukować „y jest foo bar”
x := foo
y := $(x) bar
x := later
all:;echo "y is" $(y)
Ponadto, jak inni ludzie wskazał wcześniej, można uzyskać więcej szczegółów w Using Variables części GNU make instrukcji.
Nadzieja to pomaga :-)
masz odpowiedź (i więcej) w tym [duplikowane pytanie] (http://stackoverflow.com/questions/448910/makefile-variable-assignment) – Seki
Co stało starej dobrej tradycji czytania dobrej instrukcji? Odpowiedź jest na wyciągnięcie ręki ... – Jens