一個簡單的例子:起初有兩個.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命令一次清除,還原到最初狀態。(上述僅供參考)