使用函式
使用條件判斷可以讓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 變數名 值 引用變數可在之後定義 ...