Makefile編寫語法

2021-09-28 14:58:13 字數 3091 閱讀 6519

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:目標檔名可以多個,空格隔開

prerequisite:依賴目標

command:命令列,命令太長用反斜槓\作為換行符,需要tab作為開頭

%代表任意長度串,空格不屬於

在makefile中使用命令要tab開始,

否則會出現「遺漏分隔符,停止」。

變數有(=)和(:=)兩種,前者會造成遞迴定義。

(?=)如果左邊變數未定義則賦予右值。

變數使用需要$(變數)或者$。

全域性變數

define 變數

命令endef

全域性變數

override 指示符

全域性變數

$@目標集合 $《依賴目標集合

自動化變數 中$《屬於規則性變數,依賴於規則的目標和依賴目標的定義

目標變數

自動化變數執行才有值

%.o :cflags=-o

目標模式變數

$(function argument1,argument2)

$函式呼叫

若干個單詞串處理函式

$(subst replaceword,newword,sourcetext

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

feet on the street

空返回『 』

$(patsubst pattern,replacement,sourcetext)

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

x.c.o bar.o

$(findstring find,sourcetext)

有返回對應,否則' '

$(filter pattern1 pattern2 ,sourcetext)

過濾器,返回sourcetext符合 %.字尾的模式

$(filter-out pattern1 pattern2,sourcetext)

反過濾,返回不符合對應模式的

$(sort word1 word2)

字母序公升序排序且去重

$(word index_1,sourcetext)

取第index個單詞(單詞不是字元),從1開始

$(wordlist fromindex_1,toindex_1,sourcetext)

去從fromindex到toindex的文字單詞

$(words sourcetext)

統計單詞個數

$(firstword sourcetext)

返回首單詞

檔名操作函式

$(dir  name1 name2)

取目錄函式,返回檔案所在目錄,不包括檔名

$(dir usr/e/hha.c dd)

usr/e/  ./

$(notdir name1 name2)

取檔名

$(notdir usr/e/hh.c dd)

hh.c dd

$(suffix name1 name2)

取字尾,無字尾『 』

$(basename name1 name2)

取字首,無字首『 』

$(addsuffix suffix,sourcetext)

加字尾$(addprefix prefix,sourcetext)

加字首$(join list1,list2)

連線函式,對應index的連線,無對應自己

$(foreach oneoflist,list,everydealtext)

迴圈函式,list中取之區域性變數oneoflist中,用到處理部分,每個返回空格連線

條件判斷函式

ifeq (arg1,arg2)  endif

if equal 判斷是否相等?真:假;

ifneq (arg1,arg2)  endif

判斷是否不等?真:假;

ifdef variable-name  endif

變數有值?真:假;

ifndef variable-name  endif

變數空值?真:假;

$(if condition,then_part,else_part)

$(if condition,then_part)

其他函式

$(call expression,parm1,parm2)

在expression中用到後面的parm1用$(1)

reverse=$(2) $(2)

foo=$(call reverse,a,b)

b a$(origin variable)

undefined未定義

****ult預設定義 cc

environment環境變數

file被定義在makefile

command line被命令列定義

override指示符重新定義

automatic乙個命令執行中的自動化變數

$(shell shell命令)

生成乙個shell程式來執行命令

$(shell echo just text)

just text

控制make的函式

$(error text)

ifdef error_001

$(error error is $(error_001))

endif

$(warning text)

模式規則

destipattern:sourcepattern;command

%.o:%.c

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

@echo just text 

echo just text

just text

echo just text

just text

Linux下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...

Linux下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...

makefile簡說 編寫makefile

linux下原始碼編譯 linux下原始碼編譯c c 通常使用gnu工具鏈。c c 的編譯過程,通常為原始檔 c cc cpp字尾檔案 編譯為中間目標檔案 即生成為.s o等字尾的中間檔案 再通過鏈結生成可執行檔案 編譯器的編譯過程大致分為四個步驟 預處理 編譯 彙編和鏈結 建立乙個專案檔案proj...