天天看點

Linux系統-Makefile規則介紹、基本使用

1. Makefile基本使用

指令行的make指令支援解析makefile和Makefile檔案。

如果我們編寫的規則檔案不是makefile或者Makefile檔案,那麼需要使用-f選項指定。

[wbyq@wbyq linux_c]$ make -f  <規則檔案>           

Makefile檔案内部是以目标作為機關執行規則順序的。

Linux系統-Makefile規則介紹、基本使用

在Makefile檔案裡使用shell指令行的指令時,需要使用TAB鍵開頭。

app:app.c
     gcc app.c -o app           

<目标檔案名稱>:<依賴檔案>

gcc  app.c -o app                          

什麼是依賴檔案?

就是在生成這個目标之前,需要得到的檔案。

2. make指定目标執行

Makefile檔案裡可以有多個目标檔案,我們在指令行執行make指令預設執行Makefile檔案裡的第一個目标。如果需要執行指定的目标,需要在make指令後面加上執行的目标名稱即可。

Linux系統-Makefile規則介紹、基本使用
[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: 在執行的指令前面加上@符号

Linux系統-Makefile規則介紹、基本使用

4. 示例1: 編譯一個簡單的工程

使用顯式規則編寫Makefile檔案,編譯一個工程。

Linux系統-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檔案,編譯一個工程。

Linux系統-Makefile規則介紹、基本使用

6. 示例3: 編譯一個簡單的工程

使用隐式規則編寫Makefile檔案,編譯一個工程。

Linux系統-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. 特殊變量的使用

Linux系統-Makefile規則介紹、基本使用
編寫的Makefile檔案:
CC=gcc   #指定編譯器
VPATH=./main:./sum  #指定隐式推導時搜尋的路徑
CFLAGS=-I ./sum  #指定編譯器編譯是自動增加的選項參數
OBJ=app.o sum.o  #依賴檔案
app:$(OBJ)
    $(CC) $^ -o $@
.PHONY:clear #聲明僞目标
clear:
    rm *.o app           

繼續閱讀