Makefile介紹和編寫

2021-09-28 20:14:27 字數 3928 閱讀 5462

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