makefile簡明使用方法

2021-09-27 00:18:23 字數 2648 閱讀 1675

命令前面加乙個減號的意思是,該命令如果出錯也不停止

命令前面加@的意思是,這個命令將不顯示出來

makefile中的變數其實就是c語言中的巨集

:=定義的變數不能使用後面定義的變數

=定義的變數可以使用後面的變數

+=是追加

例如,

a=5$(b)

c:=5$(b)

b=m

b是5m,c是5

vpath變數

make會在當前目錄找不到依賴檔案和目標檔案的情況下,到vpath指定的目錄中取尋找檔案。

變數的替換

$(var:a=b)

把變數var中所有以a字串結尾的單詞的結尾的a字串替換成b字串

foo := a.o b.o c.o

bar := $(foo:.o=.c)

bar的值為a.c b.c c.c

還可以進行更精確的控制:

foo := a.o b.o c.o

bar := $(foo:%.o=%.c)

有若干關鍵字實現條件控制:ifeq、ifneq、else、endif、ifdef、ifndef

define用來實現多行變數,以endef結尾

: :
看乙個例子:

objects = foo.o bar.o

all: $(objects)

$(objects): %.o: %.c

$(cc) -c $(cflags) $< -o $@

模式規則中,目標的定義需要有%字元,%表示乙個或多個任意字元:

%.o : %.c 

其指出了怎麼從所有的 [.c] 檔案生成相應的 [.o] 檔案的規則。如果要生成的目標是「a.o b.o」,那麼「%c」就是「a.c b.c」。

$@: 表示規則中的目標檔案集。如果有多個目標,那麼「$@」就是匹配於目標中模式定義的集合。

$<: 依賴目標中的第乙個目標名字。如果依賴目標是以模式(即「%」)定義的,那麼「$<」將是符合模式的一系列的檔案集。注意,其是乙個乙個取出來的。

$^: 所有的依賴目標的集合。以空格分隔。如果在依賴目標中有多個重複的,這個變數會去除重複的依賴目標,只保留乙份。

$+: 這個變數很像「$^」,也是所有依賴目標的集合。只是它不去除重複的依賴目標。

$@、$《在擴充套件時只會有乙個檔案,$^、$+的值是乙個檔案列表。

讓萬用字元在變數中展開:

objects := $(wildcard *.o)

$(shell )

新生成乙個shell程序來執行命令

$(call ,,...)

舉個例子,

foo = $(2) $(1)

bar = $(call foo,a,b)

那bar的值就是b a

$(if ,)

$(if ,,)

$(foreach ,,)

把引數中的單詞逐一取出放到引數所指定的變數 中,然後再執行所包含的表示式。每一次會返回乙個字串,迴圈過程中,每次所返回的每個字串會以空格分隔,最後當整個迴圈結束時,最後返回整個字串(以空格分隔)。

例如,names := a b c

files := $(foreach n,$(names),$(n).o)

files的值是a.o b.o c.o

字串處理函式

以下表示的是一組單詞

$(subst ,,)

字串替換

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

$(patsubst ,,)

模式字串替換,查詢中單詞是否符合模式,如果匹配的話,則以替換

$(patsubst %.c,%.o,x.c.c bar.c)

$(strip )

取出開頭和結尾的空字元

$(findstring ,)

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

$(filter ,)

以模式過濾字串中的單詞

$(filter-out ,)

與filter相反

$(sort )

排序並去重

$(word ,)

取字串中的第個單詞(從1開始)

$(wordlist,,)

取字串中的第到第個單詞(前後都是閉區間)

$(words )

統計單詞個數

$(firstword )

取第乙個單詞

檔名操作函式

以下表示的是一組檔名

$(dir )

取目錄$(dir src/foo.c hacks) 返回值是 "src/ ./"

$(notdir )

取檔案函式

$(suffix )

取字尾函式(檔案字尾名)

$(basename )

取basename

$(addsuffix ,)

新增字尾

$(addprefix ,)

新增字首

跟我一起寫 makefile (陳皓)

makefile使用方法

1.makefile格式 target dependency files command 即make需要執行的命令 vi乙個makefile檔案,用make執行,make預設執行第乙個檔案,也可以make f1.c其中乙個c檔案。就是將.c檔案生成.o目標 檔案,上面一句是說明目標檔案的依賴,下面是...

proxool簡明使用方法

proxool的2種連線方法 首先從 http proxool.sourceforge.net proxool 0.9.0 rc2.zip 解壓後,把commons logging.jar和proxool 0.9.0 rc2.jar放到工程的lib資料夾裡面。方法一 和jdbc連線方法類似。jdbc...

makefile的基本使用方法

makefile的基本使用方法 有三個檔案,file1.c file2.c file3.h,第乙個檔案呼叫第二個檔案的函式,第三個檔案為標頭檔案,其makefile為 gobbin file1.o file2.o gobbin為程式名稱,依賴於file1.o file2.o兩個目標檔案 gcc fi...