make [-f makefile檔名][選項][巨集定義][目標]
-idirname 指定被包含的makefile所在目錄
-w 如果make在執行時改變目錄,列印當前目錄名
-d 列印除錯資訊
-k 用該選項,即使make程式遇到錯誤也會繼續向下執行
1、顯式規則:用於描述系統中模組之間的相互依賴關係,以及產生目標檔案所要執行的命令(規則)。
編寫規則通用形式:
target : dependency [depenency [...] ]
command
command
注:command前是tab鍵,而非空格
使用這些命令來根據依賴模組產生目標,這裡的command既可以是gcc/g++編譯命令,也可以是shell命令或是其他可執行檔案。
main : main.o f1.o f2.o
gcc -o main main.o f1.o f2.o
main.o : main.c def1.h
gcc -c main.c
f1.o : f1.c def1.h def2.h
gcc -c f1.c
f2.o : f2.c def2.h def3.h
gcc -c f2.c
2、隱式規則:又稱預定義規則。隱式規則簡化了makefile的編寫和維護。(make命令帶-p選項),
比如:字尾規則,可以指定:.suffixes: .o .cpp
.cpp.o:
$(cpp) –c $<
3、模式規則提供的一種擴充套件make隱式規則的方法,規則與普通規則一樣,主要是目標必定含有%號,
比如:%.o : %.c
$(cc) -c $(cflags) $(cppflags)
$<
-o $@
4、變數定義(自動變數/預定義變數/自定義變數)
5、檔案指示(include, make -i, #if include)。
6、特殊字元:注釋# 轉義/ 萬用字元* 宿主目錄~ 模式字元「%」
「*.c」代表了當前工作目錄下所有的以「.c」結尾的檔案
「%」意思是匹配乙個或者多個字元,例如,「%.h」表示所有以「.h」結尾的檔案
1、定義方法: varname=some_text [...]
如: objs := howdy.o helper.o
2、變數引用:$(varname)或 $
示例:inc = $(patsubst %,-i%,$(allinc))
make支援的函式有:
$(subst ,,)
$(patsubst ,,)
$(filter ,) .....
7、分支語法
< conditional-directive>
< text-if-true>
endif
以及:< conditional-directive>
else
endif
注:conditional-directive可以是:ifeq(), ifneq(), ifdef, ifndef
分支語法示例:
libs_for_gcc = -lgnu
normal_libs =
foo: $(objects)
ifeq ($(cc),gcc)
$(cc) -o foo $(objects) $(libs_for_gcc)
else
$(cc) -o foo $(objects) $(normal_libs)
endif
注:上面示例的這個規則中,目標foo可以根據變數$(cc)的值選取不同的函式庫來編譯程式
8.make的妙用
•同步檔案至遠端伺服器:
cmdscp:
scp -p3600 exe [email protected]:/usr/local/..
makefile檔案編寫
hello.c include include function.h int main function.c includeint fun1 int fun2 int fun3 function.h ifndef fun h define fun h int fun1 void int fun2 v...
Makefile檔案編寫
1 基本大全教程 2 四個賦值的區別 是最基本的賦值 是覆蓋之前的值 是如果沒有被賦值過就賦予等號後面的值 是新增等號後面的值其中 和 的區別是 立馬賦值,是整個makefile檔案讀取完後賦值。1 make會將整個makefile展開後,再決定變數的值。也就是說,變數的值將會是整個makefile...
Makefile檔案編寫
main3.c 1 include 2 include static lib.h 3 include fun.h 4 5int main void static lib.h和 1 extern int add int a,int b 2 extern int sub int a,int b 3 ex...