make編譯筆記(四)

2021-10-08 16:39:32 字數 3980 閱讀 2587

函式的呼叫語法

$(函式名 引數集合)

$

函式名和引數之間用空格隔開,引數之間用, 符號

字串處理函式

字串替換函式,把text中的from字元替換成to,返回被替換後的字串

模式字元換替換函式,查詢text中的單詞(以空格、tab、回車、換行分隔)是否符合模式pattern,如果匹配則以replacement替換。pattern可以包括萬用字元%,表示任意長度的字串。如果replacement包含%,那麼pattern中的哪個%所代表的字串。返回被替換後的字串

去掉空格函式,去掉字串開頭和結尾的空格,返回被去掉空格的字串值

查詢字串函式,在字串in中查詢find字串,如果找到,返回find,否則返回空字串

過濾函式,以pattern模式過濾text中的單詞,保留符合模式pattern的單詞,可以有多個模式。返回符合模式pattern的字串

反過濾函式,以pattern模式過濾text中的單詞,去除符合模式pattern的單詞,可以有多個模式。返回不符合模式pattern的字串

排序函式,給字串list中的單詞排序(公升序),返回排序後的字串(去除相同的)

取膽此函式,取字串text中第n個單詞(從1開始),返回text中第n個單詞。如果n比text中的單詞數要大,返回空字串。

取單詞串函式,從字串text中取從s到e的單詞穿(se為數字)返回字串text從s到e的單詞串,如果s大於text的單詞數,但會空字串,e大於返回text到結束的但此字串。

單詞個數統計函式,統計text中字串中單詞個數

首單詞函式,取字串text中的第乙個單詞

檔名操作函式

獲取目錄函式

獲取檔案函式,返回檔名序列names的非目錄部分

取字尾函式,從檔名序列names中取出各個檔名的字尾

取字首函式,從檔名序列names中去除各個檔名的字首部分

加字尾名函式,把字尾suffix加到names中的每個單詞後面

加字首函式,把字首prefix加到names中的每個單詞前面

連線函式

foreach()函式

類似於c語言的for迴圈

$(foreach ,,)
把引數list中的單詞逐一取出放到引數var所指定的變數中,然後再執行text所包含的表示式。每次text回返回乙個字串,迴圈中,text返回的每個字串以空格分隔。迴圈結束,text返回的每個字串組成的真個字串是返回值。

if()函式

很像gun的make支援的ifeq,語法:

$(if,,)

可選

call()函式

是唯一乙個可以用來建立新的引數化的函式。語法:

$(call ,,,...)
當make執行這個函式時,引數中的變數會被引數依次取代,而expression的返回值就是call()函式的返回值

origin()函式

不操作變數的值,只是告訴使用者這個變數從哪來。

$(origin )
variable是變數名,不是引用。返回值:值說明

undefined

從來沒有定義過

default

預設的定義

environment

環境變數

file

被定義在makefile中

command line

命令列定義的

override

是被override指示符重新定義的

automatic

命令執行中的自動變數

shell()函式

它的引數是作業系統shell的命令。shell()函式把執行作業系統命令後的輸出作為函式返回。

控制make的函式

make提供了一些函式來控制make的執行。

$(error )

$(warning )

error輸出錯誤資訊

warning輸出警告

make的退出碼

有3個退出碼

指定makefile

gun make尋找預設的makefile的規則是在當前目錄下依次找到3個檔案,gunmakefile、makefile和makefile。一旦找到,就開始讀取這個檔案並執行。

make的-f或-file引數

指定目標

一般,make的最終目標是makefile中的第乙個目標,其他目標是這個目標連帶出來的。要完成制定目標,只要在make命令後直接跟目標的名字就行。

任何在makefile中的目標都可被指定成最終目標。但以-或是包含了=的目標除外。

make有乙個變數makecomgoals,這個變數中會存放所指定的終極目標的列表。

make的常用偽目標

目標說明

all該偽目標是所有目標的目標,功能一般是編譯所有的目標

clean

該偽目標的功能是刪除所有被make建立的檔案

install

該偽目標的功能是安裝已編譯好的程式,就是把目標執行檔案複製到指定的目標中

print

該偽目標的功能就是列出改變過的原始檔

tar該偽目標的功能是把源程式打包備份

dist

該偽目標功能是建立乙個壓縮檔案,一般是把tar檔案壓縮成z檔案或gz檔案#br

check和test

這兩個為目標一般用來測試makefile的流程

檢查規則

make檢查引數

引數說明

-n--just-print

-dry-run

-recon

不執行引數,這些引數值是列印命令(用於除錯)

-t--touch

把目標檔案的時間更新(假編譯)

-q-question

找目標,找到什麼都不做,找不到列印出錯資訊

-w --what-if=

--assume-new=

--new-file=

需要指定乙個引數,一般是原始檔或依賴檔案。make將根據規則推到來執行依賴於這個檔案的命令。

可以和-n引數一起使用,來檢視這個依賴檔案發生的規則命令

make的引數

gun make的引數定義,不同的廠商的make的具體引數還得參考各自的文件。

列出幾個常用的

引數說明

-b-m

忽略和其他版本make的相容性

-b--always-make

認為所有目標都需要更新

-c--directory=

指定讀取makefile的目錄

--debug[=]

輸出mkae的除錯資訊。取值:

a輸出所有

b簡單的

v在b選線級別之上

i輸出所有隱含規則

j輸出執行規則中命令的詳細資訊

m熟讀make讀取makefile、更新,執行的資訊

-d--debug=a

-e--environment-override

環境變數的值覆蓋定義的變數值

-h--help

顯示幫助資訊

-k--keep-going

出錯也不停止執行

-l--just-print

--dry-run

--recon

僅輸出執行過程的命令序列但不執行

mklichee編譯筆記

環境 1 ubuntu16.04 lts x64 2 openjdk 1.7 依賴軟體列表 僅在ubuntu 16.04 x64上測試,其它版本可能不適用 sudo apt get install y git flex bison gperf build essential libncurses5 ...

android編譯筆記

清華大學映象 linaro映象 一 repo sync 是出現錯誤 error cannot fetch platform prebuilts qemu kernel fatal unable to connect to aosp.tuna.tsinghua.edu.cn aosp.tuna.tsi...

busybox編譯筆記

2.解壓 tar jxvf busybox 1.20.1.tar.bz 3.配置 1 進入解壓後的檔案busybox 1.20.1 cd busybox 1.20.1 2 進行預設配置 make defconfig 3 個別修改配置 make menuconfig busybox setting b...