Android中makfile的隨記

來源:互聯網
上載者:User

標籤:實驗   三目運算子   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的隨記

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.