2012-04-19 12 views
8

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) 
+1

masz odpowiedź (i więcej) w tym [duplikowane pytanie] (http://stackoverflow.com/questions/448910/makefile-variable-assignment) – Seki

+0

Co stało starej dobrej tradycji czytania dobrej instrukcji? Odpowiedź jest na wyciągnięcie ręki ... – Jens

Odpowiedz

4

:= 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)

-3

:= jest do przypisania, w taki sam sposób, jak =.

+= dodać nową wartość do zmiennej.

+0

: = i = są takie same? To bluźnierstwo! – shikhanshu

0

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.

0

:= 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.

9
  • : = (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.

3

"=" 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 :-)

Powiązane problemy