1. 遞迴展開變數(=):類似c中define,只是簡單的替換;用=或define關鍵字都可以定義這種變數,如果變數的定義引用了其它的變數,那麼引用會一直展開下去,直到找到被引用的變數的最新的定義,並以此作為改變量的值返回。
eg:var = i love
variable = linux
var += $(variable)
variable = magic
echo $(var)
-----> i love magic;
2.簡單擴充套件變數(:=):用這種方式定義的變數,會在變數的定義點,按照被引用的變數的當前值進行展開。
m := mm
x := $(m)
y := $(x) bar
x := later
echo $(x) $(y)
$x---> later
$y---> mm bar(只管變數定義時的值,若將y:=...==> y=...,則會變成later bar)
3.可以通過+=為已定義的變數新增新的值
當變數從前沒有被定義過, +=和=是一樣的,它定義乙個遞迴展開的變數;
當變數已經有定義的時候,+=只是簡單的進行字元的新增工作。
如果起初你用:=定義變數,那麼+=只是利用變數的當前值進行新增
如果起初用=定義變數,+=的行為就變得有些古怪,它並不會在使用+=的地方馬上進行變數展開,而是會把展開工作推後,直到它找到最後變數的定義,這和=定義變數的行為是類似的
4.?= 賦預設值,如果沒有初始化該變數,就給它賦上預設值。如:
arch=arm
arch ?= i386
all:
@echo $(arch)
輸出:arm
而arch=
arch ?= i386
all:
@echo $(arch)
輸出:i386
賦值操作符
與類要控制初始化物件的方式一樣,類也定義了該型別物件賦值時會發生什麼 sales item trans,accum trans accum 與複製建構函式一樣,如果類沒有定義自己的賦值操作符,則編譯器會合成乙個。過載操作符是一些函式,其名字為 operator 後跟著所定義的操作符的符號。因此,通過...
賦值操作符
預設的賦值操作符用於處理同類物件之間的賦值,不要與複製建構函式混淆.如果是建立新的物件,則呼叫複製 拷貝 建構函式,如果是修改已有物件的值,則呼叫賦值操作符 myclass aclass myclass bclass aclass 呼叫複製建構函式 myclass cclass cclass acl...
C 賦值操作符
定義類時,編譯器會自動幫我們定義的有四個 建構函式 析構函式 複製建構函式 賦值操作符。賦值操作符定義了該型別的物件賦值時會發生什麼。過載操作符是一些函式,其名字為operator後跟著所定義的操作符的符號。通過定義名為operator 的函式,我們可以對賦值操作符進行定義。該函式有返回值和形參表。...