makefile筆記整理

2021-10-01 09:10:14 字數 2471 閱讀 1497

make命令會在當前目錄下按順序找尋檔案「makefile」、「makefile」的檔案,找到了執行make命令,否則退出。

1、基本規則  gcc -o  main  a.o  b.o  c.o  ....

全部技巧都是為了把檔案組織為  gcc -o ***x 的形式

2、 三個特殊的符號 @,^, <  : 代表gcc -o 後面的組成成分: 目標檔案,所有依賴檔案,第乙個依賴檔案,使用時加上$引用符號,$@: 代表目標檔案; $^ 表示,所有依賴項    $《表示第乙個依賴項 ; 所以通用的 gcc -o 形式變成了如下:

gcc -o  $@  $^

3、目標檔案與依賴檔案的書寫形式    目標:依賴1 依賴2.  ....... 如 

main1.o :  main1.c   main11.c  main111.c

main2.o :  main2.c   main3.c  main4.c

main  :  main1.o   main2.o  

4、依賴和規則的一般書寫形式:前一行是依賴,後一行是規則

main  :  main1.o   main2.o  

gcc  -o  $@   $^

main1.o :  main1.c  main11.c

gcc -o   $@   -c  $^       #  -o 是輸出檔案  -c 是輸入檔案,需要區分清楚

main2.o :  main2.c

gcc -o   $@   $<     #  這裡-c可以省略不寫,預設目標檔案後面都是輸入檔案

clean: 

rm *.o  main 

至此,已經可以正常使用makefile了

不過:每次新加檔案都要在依賴項裡面新增檔名,不夠懶,我需要再智慧型一些,那麼接著往下學

5、 %[ pattern ]表示匹配模式,如  %.o匹配.o結尾的檔案 main1.o  main2.o  .....  %.c  匹配  .c結尾的檔案,那麼寫法又智慧型了一些

main  :  main1.o   main2.o  

gcc  -o  $@   $^

%.o  :  %.c 

gcc -c   $^      # -o  $@也可以不寫,預設跟 .c檔案同名,以.o結尾

但是,多數時候 ,依賴檔案並不是只有.c結尾,有可能cpp, hpp,cc等都行,而且我就是需要的羅列出來,有些不想要, 那麼只能辛苦些了,每個目標和依賴項都列一下,但是開頭的我們可以簡化一些,接著往下走

6 、 = 可以建立乙個變數, 如  objs =  a.o  b.o  c.o  ...., 使用變數用 $(objs)形式使用,另外  gun在遇到第乙個 gcc  之後,後面的gcc可以預設作為工具使用,所以寫第乙個就行了,後面就省略了。 makefile就如下所示了:

objs = a.o  b.o  c.o  d.o 

main  :  $(objs)

gcc  -o  $@   $(objs)

a.o  :  a.c  a.cc a.hpp a.cpp  a.h

b.o  :  b.c  b.cc   b.h

c.o  :  c.c  c.cc   c.h

d.o  :  d.cpp  d.h

clean:

-rm   main  $(objs)    # 命令前面的小減號表示遇到錯誤繼續往下執行

7、很多任務程檔案的時候,放在同乙個makefile裡面列出來好像很大很難看,我們可以用分而治之的辦法,每個分支用乙個makefile份檔案,最後用include 的形式統籌,假如有 a.mk  b.mk  c.mk  d.mk  e.mk  

objs = a.o  b.o  c.o  

main  :  $(objs)

gcc  -o  $@   $(objs)

include  a.mk  b.mk  c.mk     

#注意include一定要放在目標main後面,make只會選擇第乙個:冒號的目標作為最終目標

#或者如果全部新增 可以寫成  include  *.mk   ,甚至可以用$(var)形式:先用var = a.mk  b.mk  c.mk也是可以的

#a.o  b.o %.o  ....都在各自的mk檔案裡實現編譯了

如果這些mk都不在當前資料夾下,則需要加上路徑

8、 執行make指令的時候 ,增加  --i (或「--include) 路徑引數, 則在當前或者指定的路徑查詢所需要的mk檔案

vpath 就是用來幹這事的; 多個路徑用 : 隔開

vpath = ./dir : ../include  : ../lib : ../source ./code 

# ./表示當前目錄,可省略不寫,dir跟./dir等同

objs = a.o  b.o  c.o  

main  :  $(objs)

gcc  -o  $@   $(objs)

include  a.mk  b.mk  c.mk     

makefile 課上學習筆記整理

嵌入式linux開發工具 vim文字編譯器 gcc編譯器 gdb偵錯程式 工程管理器make 指令碼shell 什麼工程?很多檔案構成的軟體 10000個.c檔案如何編譯 工程管理器 作用?自動編譯 管理 git github makefile作用 規定了如何自動編譯 makefile語法 三要素 ...

makefile學習筆記 makefile概述

20180411 makefile學習筆記 makefile概述 makefile主要是在unix下軟體編譯時寫的,window下一般不用 unix裡makefile做的事 相當於window裡ide所做的事 會不會寫makefile,從乙個側面說明了乙個人是否具備完成大型工程的能力。makefil...

makefile筆記小結

makefile 1.1 以學生管理系統為例 compile.sh指令碼寫法如下 gcc c common.c gcc c student.c gcc c teacher.c gcc c main.c gcc common.o student.o teacher.o main.o o aa rm r...