Makefile語法高階

2021-10-20 18:36:50 字數 1702 閱讀 9808

迴圈條件

其他makefile基本語法

呼叫子makefile

類似函式

關鍵字有:ifeq,ifneq,ifdef,ifndef

ifeq ($(cc),gcc)

$(cc) -o *** ***

else

$(cc) -o xx xx

endif

函式

含義$(subst ,

)字串替換函式

$(patsubst ,,

)模式字串替換函式

$(strip )

去空格函式

$(findstring ,)

查詢字串函式

$(filter ,

)過濾函式

$(filter-out ,

)反過濾函式

$(sort )

排序函式

$(word ,

)取單詞函式

$(wordlist ,,

)取單詞串函式

$(words

)單詞個數統計函式

$(firstword

)首單詞函式

例:

sources := main.c foo.c bar.s other.c include.h

foo: $(sources)

cc $(filter %.c %.s,$(sources)) -o foo

$(filter %.c %.s,$(sources))返回的值是:main.c foo.c bar.s other.c

函式含義

$(dir )

取目錄函式

$(notdir )

取檔案函式

$(suffix )

取字尾函式

$(basename )

取字首函式

$(addsuffix ,)

加字尾函式

$(addprefix ,)

加字首函式

$(join ,)

連線函式

例:$(basename src/main.c src/other.c hacks)返回值是:src/main src/other hacks

$(foreach ,,

)

names := a b c d

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

$(files)的值是 :a.o b.o c.o d.o

$(if ,)

$(if ,,)

val := a

objects := $(if $(val),$(val).o,nothing)

call函式是唯一乙個可以用來建立新的引數化的函式

$(call ,,,…,)

rever = $(1)$(2)

foo = $(call rever,a,b)

$(shell 執行shell命令並將返回結果作為返回值

contents := $(shell cat foo)

files := $(shell echo *.c)

makefile語法 Makefile的語法

假如乙個目標檔案所依賴的依賴檔案很多,我們豈不是要寫很多規則?這顯然不合乎常理。我們可以使用萬用字元解決這些問題。我們對上節程式進行修改 如下 test a.o b.o gcc o test o c gcc c o o 表示所用的.o檔案 c 表示所有的.c檔案 表示目標 表示所有依賴檔案 在該目錄...

makefile語法示例

edit main.o kbd.o cc o edit main.o kdb.o main.o main.c defs.h cc c main.c kbd.o kbd.c defs.h command.h cc c kbd.c clean rm o edit makefile中使用變數 object...

Makefile編寫語法

makefile樣例 all main.c foo1.c foo2.c foo3.c gcc main.c foo1.c foo2.c foo3.c o all targets prerequisites command 或者targets prerequisites command targets...