1.makefile基本原理
本質就是乙個指令碼,這個指令碼用make來執行
檔名makefile或makefile
原理,是根據目標,執行下面的指令
目標後面如果還有依賴的目標,則先執行後面目標的指令,再執行前面目標的指令
aaa:
find ./ -name 「*」
eee:rrr
lsrrr:
echo 「adfadsf」
2.基本結構 基礎
可執行名:依賴的.o 依賴的庫
鏈結依賴的庫:依賴的.o
生成庫的指令
依賴的.o:
生成.o的指令
test:test.o libmplay.a
gcc -o test test.o -l./ -lmplay -lpthread
libmplay.a:mplay.o
ar -rc libmplay.a mplay.o
test.o:
gcc -o test.o -c test.c
mplay.o:
gcc -o mplay.o -c mplay.c
clean:
rm -rf *.o libmplay.a test
test:test.o libmplay.a
gcc -o test test.o -l./ -lmplay -lpthread
libmplay.a:mplay.o
ar -rc libmplay.a mplay.o
#將多個.o的目標合併在一起
test.o mplay.o:
gcc -c test.c mplay.c
clean:
rm -rf *.o libmplay.a test
2.自動推導 很少用
test:test.o libmplay.a
gcc -o test test.o -l./ -lmplay -lpthread
libmplay.a:mplay.o
ar -rc libmplay.a mplay.o
test.o mplay.o:
#此處的.o檔案自動推導生成
clean:
rm -rf *.o libmplay.a test
3.使用變數
1)區域性變數
src=test.c mplay.c
變數的取值
$(src) 就是 test.c mplay.c
字串中字元的替換
src=test.c mplay.c
obj=$(src:.c=.o) #將變數src中的字串的.c換為.o
makefile可寫成 方法1
tar=test
src=test.c mplay.c
obj=$(src:.c=.o)
lib=-lpthread
inc=-i./
cc=gcc
$(tar):$(obj)
$(cc) -o $(tar) $(obj) $(lib)
$(obj):
$(cc) -c $(inc) $(src)
clean:
rm -rf $(obj) $(tar)
變數名起名
ar 代表的是庫編譯器 例 ar=ar
arflags 代表庫編譯的引數 例 arflags=-rc
as 代表的是匯編譯器 例 as=as
asflags 代表彙編的引數
cc 代表的是標準c編譯器,如 cc=gcc
cflags 代表是編譯.o檔案時標準c引數,如 gflags=-wall -o2 -g -pipe
cxx 代表的是c++編譯器 例 g++
cxxflags 代表c++引數
lflags 代表編譯可執行檔案時引數 ,如 lflags=-wall -o2 -g -pipe
libs 代表編譯可執行檔案時鏈結庫,如 libs=-l./ -lm
srcs 或 sources 代表原始碼檔案 .c或.cpp ,如 sources=test.c fun.c
objs 或 objects 代表依賴檔案.o ,如 objects=test.o fun.o
exe 或 target 代表可執行檔案 ,如 target=test
inpath 或 include 代表所需要的標頭檔案位置,如 include=-i./ -include "fun.h"
2)內部變數(預定義變數)
預定義變數,是指令碼中具有特定意義的變數。
$* 不包含副檔名的目標檔名稱,即test fun等 很少使用
(1)靜態模式 %
%.o:%.c
$(cc) -c $< -o $@ $(inc)
$< 所有的.c
$@ 所有的.o
makefile可寫成 方法2
tar=test
src=test.c mplay.c
obj=$(src:.c=.o)
lib=-lpthread
inc=-i./
cc=gcc
$(tar):$(obj)
$(cc) -o $(tar) $(obj) $(lib)
%.o:%.c
$(cc) -c $< -o $@ $(inc)
clean:
rm -rf $(obj) $(tar)
(2)字尾規則
.o.c:
gcc -c $<
$< 所有的.c
makefile可寫成 方法3
tar=test
src=test.c mplay.c
obj=$(src:.c=.o)
lib=-lpthread
inc=-i./
cc=gcc
$(tar):$(obj)
$(cc) -o $(tar) $(obj) $(lib)
.o.c:
$(cc) -c $< $(inc)
clean:
rm -rf $(obj) $(tar)
7.makefile之間的呼叫
-c directory
make -c /home/ //用-c來指定編譯哪個目錄下的makefile
-f file
make -f makefile1 //指定用哪個makefile 來編譯
makefile可寫成 方法4
tar=test
src=test.c
obj=$(src:.c=.o)
lib=-l./lib -lmplay -lpthread
inc=-i./lib
cc=gcc
all:creatlib $(tar)
creatlib:
make -c ./lib
$(tar):$(obj)
$(cc) -o $(tar) $(obj) $(lib)
%.o:%.c
$(cc) -c $< $(inc)
clean:cleanlib
rm -rf $(obj) $(tar)
cleanlib:
make -c ./lib clean
8.qmake生成makefile
qmake是qt的工具 用來生成工程檔案和makefile
//生成工程檔案
qmake -project -o test.pro
//生成makefile
qmake
//編譯程式
make
9.configure生成makefile Makefile的編寫和使用
make工具是linux下強大的編譯工具,make命令是linux下編譯程式的常用命令,要想使用make命令來編譯程式,首先我們的學會如何編寫makefile檔案 下面是乙個小例子,用來說明make命令的使用和makefile檔案的編寫 1.首先我們這裡來編寫乙個程式 功能 輸入兩個數,輸出其中的最...
makefile簡說 編寫makefile
linux下原始碼編譯 linux下原始碼編譯c c 通常使用gnu工具鏈。c c 的編譯過程,通常為原始檔 c cc cpp字尾檔案 編譯為中間目標檔案 即生成為.s o等字尾的中間檔案 再通過鏈結生成可執行檔案 編譯器的編譯過程大致分為四個步驟 預處理 編譯 彙編和鏈結 建立乙個專案檔案proj...
makefile編寫說明
1.定義 makefile是通過制定規則來編譯程式的乙個指令碼而已。在linux中使用make命令來執行makefile檔案。2.命名 makefile或makefile,若是指定其他名稱。如 makefile.可以這樣使用make f makefile或make clean f makefile ...