Makefile學習筆記(五)

2021-10-18 01:23:22 字數 2597 閱讀 3476

使用函式

使用條件判斷可以讓make根據不同的情況執行不同的分支。

舉例:判斷$(cc)是否是gcc,如果是的話則使用gnu函式編譯目標

libs_for_gcc =

-lgnu

normal_libs =

foo: $(objects)

ifeq ($(cc)

,gcc)

[tab]$(cc)

-o foo $(objects) $(libs_for_gcc)

else

[tab]$(cc)

-o foo $(objects) $(normal_libs)

endif

當我們的$(cc)是gcc時,foo的規則就是

$(cc)

-o foo $(objects) $(libs_for_gcc)

當我們的$(cc)不是gcc時,foo的規則是

$(cc)

-o foo $(objects) $(normal_libs)

第乙個:比較arg1和arg2是否相同。相同為真,不相同為假

ifeq (

,) ifeq ''

'' ifeq ""

"" ifeq ""

'' ifeq ''

""

第二個:比較arg1和arg2是否相同。不相同為真,相同為假

ifneq (

,) ifneq ''

'' ifneq ""

"" ifneq ""

'' ifneq ''

""

第三個:如果變數< variable-name >的值非空,那表示式為真,否則為假。

ifdef 
舉例:

bar =

foo = $(bar)

ifdef foo

frobozz = yes

else

frobozz = no

endif

根據程式的設定可知,frobozz的值為yes

第四個: 如果變數< variable-name >的值為空,那表示式為真,否則為假。

ifndef 
切記:不是命令的行千萬不要以[tab]鍵開頭,空格和空行不會影響結果

函式呼叫後,函式的返回值可以做變數來使用。

很想變數的使用規則,也是用$來標識的,語法如下:

$(

)

或是

$
arguments是引數,引數之間用逗號隔開。

舉例:

comma:=,

empty:

=space:

= $(empty) $(empty)

foo:

= a b c

bar:

= $(subst $(space)

,$(comma)

,$(foo)

)

這段**的作用就是把foo中的空格替換成逗號,subst函式是乙個替換函式,第乙個引數時被替換字串,第二個引數替換字串,第三個引數替換操作作用的字串

函式1:

$(subst ,,

)

名稱:字串替換函式

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

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

函式2

$(patsubst ,,

)

名稱:模式字串替換函式

功能:查詢< text>中的單詞(單詞以「空格」、「tab」或「回車」「換行」分隔)是否符合模式< pattern>,如果匹配的話,則以< replacement>替換。這裡,< pattern>可以包括萬用字元「%」,表示任意長度的字串。如果< replacement>中也包含「%」,那麼,< replacement>中的這個「%」將是< pattern>中的那個「%」所代表的字串。(可以用「/」來轉義,以「/%」來表示真實含義的「%」字元)

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

每個函式的引數字串都會被當做乙個或者一系列的檔名來對待

函式1:

$(dir >

)

名稱: 取目錄函式

功能: 從檔名序列< names>中取出目錄部分。目錄部分是指最後乙個反斜槓之前的部分,如果沒有反斜槓,那麼返回「 ./ 」

函式2:

$(notdir >

)

名稱:取檔案函式

功能:從檔名序列< names>中取出非目錄部分。非目錄部分是指最後乙個反斜槓(「/」)之後的部分。

返回:返回檔名序列< names>的非目錄部分。

makefile學習筆記 makefile概述

20180411 makefile學習筆記 makefile概述 makefile主要是在unix下軟體編譯時寫的,window下一般不用 unix裡makefile做的事 相當於window裡ide所做的事 會不會寫makefile,從乙個側面說明了乙個人是否具備完成大型工程的能力。makefil...

Makefile學習筆記

makefile for boot asm nasm 定義變數 asmflags i include run qemu system i386 hdd boot.img boot.img boot.asm asm boot.asm f bin o boot.img install run clean...

Makefile學習筆記

本文為學習筆記,僅供參考,如有好的建議歡迎指出!makefile規則 目標檔案 依賴檔案 tab 命令 命令前必須有乙個tab exp test main.c gcc main.c o test 隱式規則 o c 同名匹配 變數 類似於c中的巨集,引用方式 arg 變數名 值 引用變數可在之後定義 ...