Linux——如何編寫Makefile文件


一個簡單的例子:起初有兩個.c和兩個.h文件(hannuo.c不是不用管)
test.c:

 test.h:

txt.c:

txt.h:

文件都在同一目錄下:

一般情況下編譯:

 可以看到成功生成了result文件,執行:

 現在通過編寫Makefile文件來實現:

首先建立一個Makefile文件(之前我建好了如上,沒有需要建一個,名字必須為Makefile或makefile),然后用vim對文件進行編寫。

先寫依賴關系,再寫編譯等命令(命令必須以tab鍵開頭,這里將目標文件名定為result,可以自己擬定)
---------------------------------------------------
result:test.o txt.o          //依賴關系
  gcc -o result test.o txt.o    //命令
test.o:test.c
  gcc -c test.c
txt.o:txt.c test.h txt.h
  gcc -c txt.c test.h txt.h
---------------------------------------------------
這樣Makefile文件就制作好了,接下來返回到終端,輸入make命令就可生成result文件,運行一下。(下面先把原本生成的result刪掉,代碼復制粘貼后命令前的不是tab鍵,要改一下)
Makefile:

結果:

上面寫法是最原始的一種,可以用字符串代替方法簡化編寫。

運行結果:

 解釋:"="前面的等價后面的,用$()來引用格式不變,clean:命令用來清除編譯所生成的文件,$(obj)即生成的.o文件,result即生成的可執行文件,清除后如下。

還有寫法:

 運行結果:

 其中.gch為預編譯頭文件,加快編譯速度

下面還有更簡潔的寫法:

運行結果:

 

 在這里,我們用到了幾個特殊的宏。%.o:%.c,這是一個模式規則,表示所有的.o目標都依賴於與它同名的.c文件(還有head中列出的頭文件),$^表示所有依賴的關系的,這里即.c和.h文件,$<表示依賴關系第一項,即.c文件,不過這里沒用到,只是介紹一下。如果.o或者其它文件過多則會看起來一大串還是不夠簡潔,可以添加函數來寫使之更方便,如下:

 其中,shell函數主要用於執行shell命令(終端命令)./即當前目錄下,路徑可以更改為你程序文件所在目錄以便可以找到,具體到這里就是找出當前目錄下所有的.c和.h文件。而$(source:%.c=%.o)則是一個字符替換函數,它會將source所有的.c字串替換成.o,即所有的.o文件,這樣無論我們在該工程加入多少.c和.h文件Makefile都能自動將其納入到工程中來,無需手動添加極其方便,同時無論生成多少其它文件,都可用make clean命令一次清除,還原到最初狀態。(上述僅供參考

 

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM