C语言makefile文件
文章目錄
- 一、makefile的編寫
- 二、make命令
- 三、makefile文件中的變量
- 四、應用經驗
- 五、課后作業
- 六、版權聲明
在軟件的工程中的源文件是很多的,其按照類型、功能、模塊分別放在若干個目錄和文件中,哪些文件需要編譯,那些文件需要后編譯,那些文件需要重新編譯,甚至進行更復雜的功能操作,這就有了我們的系統編譯的工具。
在linux和unix中,有一個強大的實用程序,叫make,可以用它來管理多模塊程序的編譯和鏈接,直至生成可執行文件。
make程序需要一個編譯規則說明文件,稱為makefile,makefile文件中描述了整個軟件工程的編譯規則和各個文件之間的依賴關系。
makefile就像是一個shell腳本一樣,其中可以執行操作系統的命令,它帶來的好處就是我們能夠實現“自動化編譯”,一旦寫好,只要一個make命令,整個軟件功能就完全自動編譯,提高了軟件開發的效率。
make是一個命令工具,是一個解釋makefile中指令的命令工具,一般來說大多數編譯器都有這個命令,使用make可以是重新編譯的次數達到最小化。
一、makefile的編寫
makefile文件的規則可以非常復雜,比C程序還要復雜,我通過示例來介紹它的簡單用法。
文件名:makefile,內容如下:
all:book1 book46 book1:book1.cgcc -o book1 book1.cbook46:book46.c _public.h _public.cgcc -o book46 book46.c _public.cclean:rm -f book1 book46第一行
all:book book46all: 這是固定的寫法。
book1 book46表示需要編譯目標程序的清單,中間用空格分隔開,如果清單很長,可以用\換行。
第二行
makefile文件中的空行就像C程序中的空行一樣,只是為了書寫整潔,沒有什么意義。
第三行
book1:book1.cbook1:表示需要編譯的目標程序。
如果要編譯目標程序book1,需要依賴源程序book1.c,當book1.c的內容發生了變化,執行make的時候就會重新編譯book1。
第四行
gcc -o book1 book1.c這是一個編譯命令,和在操作系統命令行輸入的命令一樣,但是要注意一個問題,在gcc之前要用tab鍵,看上去像8個空格,實際不是,一定要用tab,空格不行。
第六行
book46:book46.c _public.h _public.c與第三行的含義相同。
book46:表示編譯的目標程序。
如果要編譯目標程序book46,需要依賴源程序book46.c、_public.h和_public.c三個文件,只要任何一個的內容發生了變化,執行make的時候就會重新編譯book46。
第七行
gcc -o book46 book46.c _public.c與第四行的含義相同。
第九行
clean:清除目標文件,清除的命令由第十行之后的腳本來執行。
第十行
rm -f book1 book46清除目標文件的腳本命令,注意了,rm之前也是一個tab鍵,不是空格。
二、make命令
makefile準備好了,在命令提示符下執行make就可以編譯makefile中all參數指定的目標文件。
程序make編譯目標程序。
再執行一次make。
因為全部的目標程序都是最新的,所以提示沒有目標可以編譯。
執行make clean,執行清除目標文件的指令。
再執行make重新編譯。
修改_public.c程序,隨便改點什么,只要改了就行。
然后再make
注意了,因為book46依賴的源程序之一_public.c改變了,所以book46重新編譯。
book1沒有重新編譯,因為book1依賴的源文件并沒有改變。
三、makefile文件中的變量
makefile中,變量就是一個名字,變量的值就是一個文本字符串。在makefile中的目標,依賴,命令或其他地方引用變量時,變量會被它的值替代。
我通過示例來介紹它的簡單用法。
CC=gcc FLAG=-gall:book1 book46book1:book1.c$(CC) $(FLAG) -o book1 book1.cbook46:book46.c _public.h _public.c$(CC) $(FLAG) -o book46 book46.c _public.cclean:rm -f book1 book46第一行
CC=gcc定義變量CC,賦值gcc。
第二行
FLAG=-g定義變量FLAG,賦值-g。
第七行
$(CC) $(FLAG) -o book1 book1.c$(CC)和$(FLAG)就是使用變量CC和FLAG的值,類似于C語言的宏定義,替換后的結果是:
在makefile文件中,使用變量的好處有兩個:1)如果在很多編譯指令采用了變量,只要修改變量的值,就相當于修改全部的編譯指令;2)把比較長的、公共的編譯指令采用變量來表示,可以讓makefile更簡潔。
四、應用經驗
makefile文件的編寫可以很復雜,復雜到我不想看,在實際開發中,用不著那么復雜的makefile,我追求簡單實用的方法,騰出更多的時間和精力去做更重要的事情,那些把makefile文件寫得很復雜的程序員在我看來是吃飽了撐的。
五、課后作業
把您這段時間寫的程序全部編寫到makefile中,以后再也不要在命令提示符下用gcc了。
六、版權聲明
C語言技術網原創文章,轉載請說明文章的來源、作者和原文的鏈接。
來源:C語言技術網(www.freecplus.net)
作者:碼農有道
如果這篇文章對您有幫助,請點贊支持,或在您的博客中轉發我的文章,謝謝!!!
如果文章有錯別字,或者內容有錯誤,或其他的建議和意見,請您留言指正,非常感謝!!!
總結
以上是生活随笔為你收集整理的C语言makefile文件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C语言gdb调试
- 下一篇: C语言switch分支结构