Android中makfile的隨記

2021-09-08 04:29:27 字數 2618 閱讀 6021

什麼是makefile?也許非常多winodws的程式設計師都不知道這個東西,由於那些windows的ide都為你做了這個工作,但我認為要作乙個好的android底層程式設計師。

makefile還是要懂。

特別在unix下的軟體編譯,你就不能不自己寫makefile了,會不會寫makefile,從乙個側面說明了乙個人是否具備完畢大型project的能力。

由於,makefile關係到了整個project的編譯規則。乙個project中的原始檔不計數,其按型別、功能、模組分別放在若干個資料夾中。

makefile定義了一系列的規則來指定,哪些檔案須要先編譯,哪些檔案須要後編譯,哪些檔案須要又一次編譯,甚至於進行更複雜的功能操作。

由於makefile就像乙個shell指令碼一樣。當中也能夠執行作業系統的命令。makefile帶來的優點就是——「自己主動化編譯」。一旦寫好,

僅僅須要乙個make命令,整個project全然自己主動編譯,極大的提高了軟體開發的效率。

makefile基本教程。參考文件:

因為各種編譯須要,你須要做的最主要的就是看懂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 了。

參考文件:

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:b2. 條件運算子?

和:是一對運算子,不能分開單獨使用。

3. 條件運算子的結合方向是自右至左。

makfile 中 變數的含義

例子 dep sed dependencies q makefile tmp dep sed dependencies q makefile tmp make for i in init c do echo n init cpp m i done tmp make cp tmp make makef...

Makfile檔案編寫

一 make是什麼 gnu make是乙個工程管理器,專門負責管理 維護較多檔案的處理,實現自動化編譯。如果乙個工程專案中,有成百上千個 原始檔,若其中乙個或多個檔案進過修改,make就需要能夠自動識別更新了的 不需要像方法1一樣逐個輸入編譯冗長的命令列,就可以完成最後的編譯工作。make執行時,自...

如何在makfile中檢視變數的值

在makefile中檢視變數的取值是多少應該是乙個比較麻煩的問題,但是本大神自己研究出乙個十分方便的方法.這個方法十分簡單。現在介紹如下 如果在乙個十分複雜龐大的makefile檔案中,有個地方用到乙個變數src file,你很想知道makefile執行到此處的時候這個變數的值為多少。那麼你可以在這...