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