Makefile零星知識 持續更新中

2021-10-02 20:43:53 字數 4318 閱讀 7633

1、變數

1.1變數型別

a = *** // 延時變數

b ?= *** // 延時變數,只有第一次定義時賦值才成功;如果曾定義過,此賦值無效

c := *** // 即時變數

d += yyy // 如果 d 在前面是延時變數,那麼現在它還是延時變數;

// 如果 d 在前面是立即變數,那麼現在它還是立即變數

編寫如下makefile,a為即時變數,b為延時變數:

執行:說明:

延時變數使用時才賦值,即時變數立即賦值,上面的例子中a、b均賦值為$@即當前目標檔案,但是a為即時變數賦值時無目標檔案,所以列印出的值為空,b為延時賦值,當echo列印時才對其賦值,所以b的值為當前目標test

1.2 變數的匯出

在編譯程式時,我們會不斷地使用make -c dir切換到其他目錄,執行其他目錄裡的makefile。如果想讓某個變數的值在所有目錄中都可見,要把它 export 出來。比如cc = $(cross_compile)gcc,這個 cc變數表示編譯器,在整個過程中都是一樣的。定義它之後,要使用export cc把它匯出來。

引數說明

-f指定make使用的檔案,不再使用名為makefile或者makefile的檔案

-c指定目錄

指定make檔案為makefile.build

make -f makefile.build
切換到其他目錄裡去,比如切換到/a目錄:

make -c a/

-f makefile.build

我們可以指定目標,不再預設生成第乙個目標:

make -c a/

-f makefile.build other_target

當前目錄下含有與makefile中目標名相同的檔案時會發生衝突,例如當前makefile有清理工程的目標clean,當前目錄下也有同名檔案clean

執行make會提示當前clean是最新的,這樣我們就無法清理工程了。需要在makefile中加入偽目標

偽目標使用.phony進行宣告,phony本意為假的,故稱為偽目標。

加入宣告後執行make,可以看到沒有提示了:

makefile的函式基本格式:

$()

其中function是函式名,arguments就是函式的引數,函式名和引數以空格分開,引數間使用逗號,隔開。

呼叫函式時以$()或者${}的形式都可以

3.1 foreach

foreach就是對每乙個的意思,原型:

$(foreach var,list,text)

對 list 中的每乙個元素,取出來賦給 var,然後把 var 改為 text 所描述的形式,例如:

objs := a.o b.o

dep_files :=

$(foreach f, $(objs)

, .$(f)

.d)

objs中的檔案取出賦給f,再把f替換到text選項的.$(f).d,最終dep_files就是.a.o.d.b.o.d

3.2 wildcard

wildcard本意為萬用字元,常用於匹配一些模式或者條件。

$(wildcard pattern)

pattern 所列出的檔案是否存在,把存在的檔案都列出來。例如加入srcfile := $(wildcard *.c),列出所以.c檔案:

把 text 中符合 pattern 格式的內容, filter(過濾)出來、留下來。

例子:

obj-y := a.o b.o c/ d/

dir :=

$(filter %/, $(obj-y)

) //結果為: c/ d/

3.4 filter-out
$(filter-out pattern...,text)

把 text 中符合 pattern 格式的內容, filter-out(過濾)出來、扔掉。

例子:

obj-y := a.o b.o c/ d/

dir :=

$(filter-out %/, $(obj-y)

) //結果為: a.o b.o

3.5 patsubst
$(patsubst pattern,replacement,text)

尋找text中符合格式pattern的字,用replacement替換它們。patternreplacement中可以使用萬用字元。

比如:

subdir-y := c/ d/

subdir-y :=

$(patsubst %/, %, $(subdir-y)

) // 結果為: c d

3.6 subst

字串替換函式,原型:

$(subst ,,

)

功能:把字串text>中的字串替換成

返回:函式返回被替換過後的字串。

舉例:

$(subst ee,ee,feet on the street)

feet on the street中的ee替換成ee,返回結果是feet on the street

3.7 strip

名稱:去空格函式——strip。

$(strip 

)

功能:去掉字串中開頭和結尾的空字元。

返回:返回被去掉空格的字串值。

舉例:

$(strip a    bc

)

結果為abc3.8 findstring

$(findstring ,)

名稱:查詢字串函式——findstring。

功能:在字串中查詢字串。

返回:如果找到,那麼返回,否則返回空字串。

示例:

$(findstring a,a b c)

$(findstring a,b c)

第乙個函式返回「a」字串,第二個返回「」字串(空字串)

android 零星知識點記錄

一 在按鈕上顯示影象的方式有哪些?解析 本題考查了應聘者對按鈕的靈活應用程度。button是textview 的子類,因此,button與textview一樣,也可以實現 混排效果。除了button之外,android sdk 提供了乙個專門顯示影象的按鈕元件imagebutton.anrdoid ...

東拼西湊 MATLAB一些零星知識

東拼西湊來的matlab一些零星知識,一看就懂,不解釋了 1.if else n 8 if n 1 n n 1elseif n 5 n n 1else n n 2end2.for for i 1 100if i 10break end end3.zeros zeros m,n 生成乙個m n的零矩陣...

css零星高階知識點

display inline block 可設定寬高的行級元素,如果inline block元素本行無法顯示完全的話則整個換行而不是裡面的單詞換行 position 設定參照物,top,left,right,bottom就是相對於參照物的偏移量 poistion relative 仍在文件流,tlr...