標籤:實驗 三目運算子 android 但我 hello 功能 隨記 ifd 為什麼
什麼是makefile?也許非常多Winodws的程式員都不知道這個東西,由於那些Windows的IDE都為你做了這個工作,但我認為要作一個好的Android底層程式員。
makefile還是要懂。
特別在Unix下的軟體編譯,你就不能不自己寫makefile了,會不會寫makefile,從一個側面說明了一個人是否具備完畢大型project的能力。
由於,makefile關係到了整個project的編譯規則。一個project中的源檔案不計數,其按類型、功能、模組分別放在若干個檔案夾中。
makefile定義了一系列的規則來指定,哪些檔案須要先編譯,哪些檔案須要後編譯,哪些檔案須要又一次編譯,甚至於進行更複雜的功能操作。
由於makefile就像一個Shell指令碼一樣。當中也能夠運行作業系統的命令。makefile帶來的優點就是——“自己主動化編譯”。一旦寫好,
僅僅須要一個make命令,整個project全然自己主動編譯,極大的提高了軟體開發的效率。
Makefile基本教程。參考文檔:http://blog.csdn.net/ruglcc/article/details/7814546
因為各種編譯須要,你須要做的最主要的就是看懂Makefile。最主要的就是Makefile中的賦值操作。
在Makefile中我們常常看到 = := ?
= +=這幾個賦值運算子。那麼他們有什麼差別呢?我們來做個簡單的實驗
建立一個Makefile。內容為:
ifdef DEFINE_VRE
VRE = “Hello World!”
else
endif
ifeq ($(OPT),define)
VRE ?= “Hello World! First!”
endif
ifeq ($(OPT),add)
VRE += “Kelly!”
endif
ifeq ($(OPT),recover)
VRE := “Hello World! Again!”
endif
all:
@echo $(VRE)
敲入下面make命令:
make DEFINE_VRE=true OPT=define 輸出:Hello World!
make DEFINE_VRE=true OPT=add 輸出:Hello World! Kelly!
make DEFINE_VRE=true OPT=recover 輸出:Hello World! Again!
make DEFINE_VRE= OPT=define 輸出:Hello World! First!
make DEFINE_VRE= OPT=add 輸出:Kelly!
make DEFINE_VRE= OPT=recover 輸出:Hello World! Again!
從上面的結果中我們能夠清楚的看到他們的差別了
= 是最主要的賦值
:= 是覆蓋之前的值
?= 是假設沒有被賦值過就賦予等號後面的值
+= 是加入等號後面的值
之前一直糾結makefile中“=”和“:=”的差別究竟有什麼差別,由於給變數賦值時,兩個符號都在使用。網上搜了一下,有人給出瞭解答,可是本人愚鈍。看不懂什麼意思。幾尋無果之下,也就放下了。今天看一篇部落格。無意中發現作者對於這個問題做了非常好的解答。解決這個問題之餘不免感歎,有時候給個範例不就清楚了嗎?為什麼非要說得那麼學術呢。^_^
1、“=”
make會將整個makefile展開後,再決定變數的值。也就是說,變數的值將會是整個makefile中最後被指定的值。
看範例:
x = foo
y = $(x) bar
x = xyz
在上例中,y的值將會是 xyz bar ,而不是 foo bar 。
2、“:=”
“:=”表示變數的值決定於它在makefile中的位置。而不是整個makefile展開後的終於值。
x := foo
y := $(x) bar
x := xyz
在上例中,y的值將會是 foo bar 。而不是 xyz bar 了。
參考文檔:http://www.cnblogs.com/wanqieddy/archive/2011/09/21/2184257.html
TIPS:
另外在C語言中三目運算中:
假設在條件陳述式中,僅僅執行單個的指派陳述式時, 常可使用條件運算式來實現。
不但使程式簡潔,也提高了執行效率。
條件運算子為?和:,它是一個三目運算子。即有三個參與運算的量。
由條件運算子組成條件運算式的一般形式為:
運算式1?
運算式2: 運算式3
其求值規則為:假設運算式1的值為真,則以運算式2 的值作為條件運算式的值,否則以運算式2的值作為整個條件運算式的值。
條件運算式通經常使用於指派陳述式之中。
比如條件陳述式:
if(a>b) max=a;
else max=b;
可用條件運算式寫為 max=(a>b)?a:b; 運行該語句的語義是:如a>b為真,則把a賦予max,否則把b 賦予max。
使用條件運算式時,還應注意下面幾點:
1. 條件運算子的運算優先順序低於關係運算子和算術運算子,但高於賦值符。
因此 max=(a>b)?
a:b能夠去掉括弧而寫為 max=a>b?
a:b
2. 條件運算子?
和:是一對運算子,不能分開單獨使用。
3. 條件運算子的結合方向是自右至左。
Android中makfile的隨記