linux中make命令的簡單使用以及Makefile文件的書寫

    Makefile
linux

   

    會不會寫makele,從一個側面說明了一個是否具有完成大型工程的能力。數組

    一個工程中的源件不計數,其按類型、功能、模塊分別放在若干個目錄中,makele定義了一系列的規則來指定,哪些文件須要先編譯,哪些文件須要後編譯,哪些文件須要從新編譯,甚至於進行更復雜的功能操做,由於makele就像一個Shell腳本同樣,其中也能夠執行操做系統的命令。makele帶來的好處就是「自動化編譯」,一旦寫好,只須要一個make命令,整個工程徹底自動編譯,極大的提升了軟件開發的效率。 make是一個命令工具,是一個解釋makele中指令的命令工具,makele成爲了一種在工程方面的編譯方法。ide

 

1、關於程序的編譯和連接工具

    通常來講,不管是CC++、仍是 pas,首先要把源文件編譯成中間代碼文件,在Windows下也就是 .obj 文件,UNIX下是 .o 文件,即 Object File,這個動做叫作編譯(compile)。而後再把大量的Object File合成執行文件,這個動做叫做連接(link)。spa


    make命令執行時,須要一個 Makele 文件,以告訴make命令須要怎麼樣的去編譯和連接程序。操作系統


    Makele的書寫規則:3d

    1.若是這個工程沒有編譯過,那麼咱們的全部C文件都要編譯並被連接。            blog

    2.若是這個工程的某幾個C文件被修改,那麼咱們只編譯被修改的C文件,並連接目標程序。            ci

    3.若是這個工程的頭文件被改變了,那麼咱們須要編譯引用了這幾個頭文件的C文件,並連接目標程序。開發


    在定義好依賴關係後,後續的那行定義瞭如何生成目標文件的操做系統命令,必定要以一個Tab鍵做爲開頭(make並無論命令是怎麼工做的,他只管執行所定義的命令。)。

 

2、 Make是如何工做

    一、make會在當前目錄下找名字叫「Makele」或「makele」的文件;

    二、若是找到,它會查找文件中的第一個目標文件.o

    三、若是文件不存在,它會根據依賴關係查找.s文件;

    四、若.s文件不存在,make會在當前文件中查找.s文件的依賴文件.i;    

    五、若.i文件不存在,會根據依賴關係查找.c文件,固然.c文件是存在的,因而,make會生成一個.o文件,而後去執行文件。


    這就是整個make的依賴性,make會一層又一層地去找文件的依賴關係,直到最終編譯出第一個目標文件。在找尋的過程當中,若是出現錯誤,好比最後被依賴的文件找不到,那麼make就會直接退出,並報錯,而對於所定義的命令的錯誤,或是編譯不成功,make根本不理。make只管文件的依賴性,即若是在我找了依賴關係以後,冒號後面的文件仍是不在,那麼make就不工做啦。

  

3、清空目標文件的規則

    每一個Makele中都應該寫個清空目標文件(.o和執行文件)的規則,這不只便於重編譯,也很利於保持文件的清潔。

    通常格式:

 .PHONY : clean        

 clean :               

 -rm -f 文件

    .PHONY意思表示clean是個「僞目標」,而在rm命令前面加了一個小減號的意思就是:也許某些文件出現問題,但不要管,繼續作後面的事。固然,clean的規則不要放在文件的開頭,否則,就會變成make的默認目標。

 

    例如爲建立一個進度條(後邊詳細講解)的程序(test.c)編寫一個Makefile文件,並在Makefile文件下編輯以下:

    格式1:

wKioL1dKnwOA9QS7AAAg5YLxgCU007.png-wh_50

    (注意:若是按格式1寫Makefile文件,須要將每行開頭處的‘#’刪除掉,此爲註釋符)

    格式2:

wKiom1dKnifSSkrnAAAXESlqQAU392.png-wh_50

    運行該文件效果以下:

wKioL1dKn2zBtOSXAAAYvmLWsbQ128.png-wh_50

    清除Makefile產生的多餘文件make  clean

wKiom1dKnpuy2SaeAAAZ7XZuTRo612.png-wh_50

    注:   

    一、編寫依賴方式時,必定要以Tab鍵開頭(不能用空格代替)

    二、clean通常都放在文件的最後

    三、@能夠屏蔽輸出依賴方式

    四、makefile 默認值生成一個目標文件,就中止

    

   linux下編寫一個簡單的進度條

 

    進度條實現原理:

1)實現動態的增加

    定義一個數組,並設置一個計數器,當數字增長的同時,給字符數組每次增長一個元素,而且打印時覆蓋以前的數組。

2)保證打印信息輸出在一行

    每次將光標定位在最左邊,從標處打印,使用‘\n’,回車

3)複製動態的效果實現

    定義一個數組

     char *index = -/|\\;

    輸出時index[count%4];

4)實現打印長度相同

    %-100s

5)給人複製的效果

    程序每輸出一次,程序掛起一段時間

 

     代碼以下:

wKiom1dKn_LQ7MphAABwFz0ma6g554.png-wh_50

    

    運行效果以下:

wKiom1dKoBiA1p7kAAAkRO48UFA170.png-wh_50

wKiom1dKoBjSnKLhAAAo-QrUwQ0669.png-wh_50

相關文章
相關標籤/搜索