linux_c 網絡開發日記(2)makefile簡介

makefile簡介

      當然在我們做一個大型開發是不可能一個一個的GCC去,這個時候我們的makefile就派上用場了。
GNU的make能夠使整個軟件工程的編譯、鏈接只需要一個命令就可以完成。所以程序員必須得會makeflie。
make在執行時,只需要一個名爲makefile(Makefile)的文件。makefile文件描述了整個工程的編譯,鏈接等規則。其中包括:工程中的那些源文件需要編譯以及如何編譯;需要創建那些庫文件以及如何讓創建這些庫文件、最後產生我們想要得到的可執行文件。

makefile規則示例

hello:main.o func1.o func2.o
gcc main.o func.o func2.o -o hello
main.o:main.c
gcc -c main.c
func1.o:func1.c
gcc -c func1.c
func2.o:func2.c
gcc -c func2.c
.PHONY:clean
clean:
rm -f hello main.o func1.o func2.o
規則:用於說明如何產生一個或多個目標文件,規則格式如下:

targets:prerequisities
command
目標依賴
命令   //命令需要以【Tab】鍵開始//
在makefile中,規則的順序很重要,因爲makefile中只應該有一個最終目標,其他的目標都是這個目標所帶出來的,所以一定要讓make知道你的最終目標是什麼。一般來說,定義在makefile中的目標可能會有很多,但是第一條規則種的目標將被確立爲最終目標。

文件名

makefile命令默認在當前目錄下尋找名字爲makefile 或者Makefile的工程文件,當名字不爲這兩者之一時,可以使用: make -f 文件名 的命令。

僞目標

makefile中把那些沒有任何依賴只有執行動作的目標稱爲“僞目標(phony targets)”


如上面例子中
.PHONY:clean
clean:
rm -f hello main.o func1.o func2.o
.PHONY”將“clean”目標聲明爲僞目標

變量

當有大量重複性修改時我們可以使用變量。
例子:
obj=
hello:$(obj)
gcc $(obj) -o hello

在makefile中,存在系統默認的自動化變量
$^:代表所有依賴文件
$@:代表目標
$<:代表第一個依賴文件。
例:
hello:main.o func1.o func2.o
gcc main.o func.o func2.o -o hello
可以改寫爲:
hello:main.o func1.o func2.o
gcc $^ -o $@

雜項

makefile中“#”字符後的內容被視作註釋

hello:main.o func1.o func2.o
@gcc main.o func.o func2.o -o hello

@:取消回顯

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章