一个最简单的Makefile例子(转)
原文地址:http://hi.baidu.com/hellosim/blog/item/42e78341b40c3e8db2b7dce3.html
轉載請注明出處
1.hello.c
#include <stdio.h>
int main()
{
??? printf("Hello World!\n");
??? return 0;
}
2.Makefile
hello : hello.o
??? cc -o hello hello.o
hello.o : hello.c
??? cc -c hello.c
clean :?
??? rm hello.o
說明:cc -o hello hello.o前面是一個tab的空格
3.執(zhí)行make,產(chǎn)生可執(zhí)行文件hello
輸出如下:
cc -c hello.c
cc -o hello hello.o
4.執(zhí)行make clean,刪除產(chǎn)生的中間文件hello.o
輸出如下:
rm hello.o
另轉:http://hi.baidu.com/s_rlzheng/blog/item/4bc10a06892e217d030881ef.html
??本來早就應該學Makefile了,只是我偷懶,現(xiàn)在才學呵呵^_^makefile的好處叫我說,老實說我也說不出什么之所以然來,但是可以肯定的是它是linux平臺的軟件工程師都要必備的知識^_^
一、程序的編譯及鏈接
????我們編譯程序,無非是想要得到一個可執(zhí)行文件,而這個過程則是經(jīng)過這兩步:
***.c->編譯->***.o->鏈接->可執(zhí)行文件。即.c經(jīng)過編譯得到.o文件,.o文件是一個中間文件,再對這些中間文件進行鏈接最終可得到可執(zhí)行文件。
二、Makefile的規(guī)則
首先,來看一看Makefile的書寫規(guī)則:
target ... : prerequisites ...
??????????? command
??????????? ...
??????????? ...
??? target也就是一個目標文件,可以是.o文件,也可以是執(zhí)行文件,還可以是一個標簽(Label)。
??? prerequisites就是,要生成那個target所需要的文件或是目標。
??? command也就是make需要執(zhí)行的命令(任意的Shell命令)。這里要注意的是在命令前面要加上一個tab鍵,不是空格,是按一個tab鍵按出來的空格。
?????這是一個文件的依賴關系,也就是說,target這一個或多個的目標文件依賴于prerequisites中的文件,其生成規(guī)則定義在command中。說白一點就是說,prerequisites中如果有一個以上的文件比?target文件要新的話,command所定義的命令就會被執(zhí)行。這就是Makefile的規(guī)則,也就是Makefile中最核心的內(nèi)容。這是Makefile的主線和核心,但要寫好一個Makefile還得繼續(xù)努力。
三、一個最簡單的Makefile例子
如有一個工程,含有3個頭文件及四個c文件,那為了生成所需的可執(zhí)行文件,這時的Makefile可以這樣寫:
test:main.o t1.o t2.o t3.o
?????gcc –o test main.o t1.o t2.o t3.o
main.o:main.c
?????gcc –c main.c
t1.o:t1.c t1.h
?????gcc –c t1.c
t2.o:t2.c t2.h
?????gcc –c t2.c
t3.o:t3.c t3.h
?????gcc –c t3.c
clean:
?????rm test main.o t1.o t2.o t3.o
到這里一個最簡單的makefile就寫好了,把它的名字保存為Makefile就可以了,這時你只要在終端敲一下make,它就自動幫你編譯鏈接了^_^如果敲入make clean,它將刪掉那些中間文件及可執(zhí)行文件。
總結
以上是生活随笔為你收集整理的一个最简单的Makefile例子(转)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 分形艺术照
- 下一篇: nohup 命令 用途:不挂断地运行命令