1. Makefile基本使用
指令行的make指令支援解析makefile和Makefile檔案。
如果我們編寫的規則檔案不是makefile或者Makefile檔案,那麼需要使用-f選項指定。
[wbyq@wbyq linux_c]$ make -f <規則檔案>
Makefile檔案内部是以目标作為機關執行規則順序的。
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIn5GcucDN1QDN0UDOwgDMyETMyAjMtU2Zh1Wavw1Ztl2LcJXZ0NXYt9CX3FmcvwFZlJWLn5Wa3Fmck1yZvxmYvw1Zu9GbvFWa4NHZvwVbvNmLlVGdpd2Lc9CX6MHc0RHaiojIsJye.png)
在Makefile檔案裡使用shell指令行的指令時,需要使用TAB鍵開頭。
app:app.c
gcc app.c -o app
<目标檔案名稱>:<依賴檔案>
gcc app.c -o app
什麼是依賴檔案?
就是在生成這個目标之前,需要得到的檔案。
2. make指定目标執行
Makefile檔案裡可以有多個目标檔案,我們在指令行執行make指令預設執行Makefile檔案裡的第一個目标。如果需要執行指定的目标,需要在make指令後面加上執行的目标名稱即可。
[wbyq@wbyq linux_c]$ make
pwd
/mnt/hgfs/linux-share-dir/linux_c
[wbyq@wbyq linux_c]$ make app2
ls
a.out app.c Makefile makefile_1234567 sum
[wbyq@wbyq linux_c]$ make app3
touch 123.c
touch 456.c
[wbyq@wbyq linux_c]$ make app4
rm 123.c
rm 456.c
[wbyq@wbyq linux_c]$ make app1 app2 app3 app4
pwd
/mnt/hgfs/linux-share-dir/linux_c
ls
a.out app.c Makefile makefile_1234567 sum
touch 123.c
touch 456.c
rm 123.c
rm 456.c
[wbyq@wbyq linux_c]$
3. 隐藏makefile檔案執行指令
方法1: make -s
方法2: 在執行的指令前面加上@符号
4. 示例1: 編譯一個簡單的工程
使用顯式規則編寫Makefile檔案,編譯一個工程。
[wbyq@wbyq linux_c]$ ls
app.c Makefile sum.c sum.h
[wbyq@wbyq linux_c]$ make -n
gcc sum.c -c
gcc app.c -c
gcc sum.o app.o -o app
[wbyq@wbyq linux_c]$ make
gcc sum.c -c
gcc app.c -c
gcc sum.o app.o -o app
[wbyq@wbyq linux_c]$ ./app
sum_val=300
[wbyq@wbyq linux_c]$
5. 示例2: 編譯一個簡單的工程
使用自動化編譯符号優化Makefile檔案,編譯一個工程。
6. 示例3: 編譯一個簡單的工程
使用隐式規則編寫Makefile檔案,編譯一個工程。
[wbyq@wbyq linux_c]$ ls
app.c Makefile sum.c sum.h
[wbyq@wbyq linux_c]$ make -n
cc -c -o app.o app.c
cc -c -o sum.o sum.c
gcc app.o sum.o -o app
[wbyq@wbyq linux_c]$ make
cc -c -o app.o app.c
cc -c -o sum.o sum.c
gcc app.o sum.o -o app
[wbyq@wbyq linux_c]$ make
make: “app”是最新的。
[wbyq@wbyq linux_c]$ make
cc -c -o app.o app.c
cc -c -o sum.o sum.c
gcc app.o sum.o -o app
7. 特殊變量的使用
編寫的Makefile檔案:
CC=gcc #指定編譯器
VPATH=./main:./sum #指定隐式推導時搜尋的路徑
CFLAGS=-I ./sum #指定編譯器編譯是自動增加的選項參數
OBJ=app.o sum.o #依賴檔案
app:$(OBJ)
$(CC) $^ -o $@
.PHONY:clear #聲明僞目标
clear:
rm *.o app