從小程序中看make和Makefile的簡單使用

   我們都知道程序在執行之前會有兩個很重要的過程:編譯和鏈接。當然我們在Windows平臺的編譯器中(像vs),它會自動幫我們生成最後的執行程序,如(xxx.exe);但是Linux下我們使用vim時,gcc和g++是可以一次性將一個源代碼生成可執行程序,可是一個項目可不止一個源文件,一個項目的運作是要將各個源代碼編譯成目標文件後,再將它們鏈接起來後執行的。

   試想一下如果一個工程有上百個源文件,那你將所有源文件都編譯鏈接完後,程序也能跑起來,然後你的boss不滿意,讓你修改幾處地方,然後你改完之後又得在寫一遍,好不容易寫完,他還是不樂意,然後你又得寫一遍......其實這裏你大部分時間都被浪費在無用功上,那些編譯和鏈接的命令其實只要寫一遍就好,每回改完只要叫它們再運行一次就好。

  而make和Makefile就是可以解決這樣的問題,你將你的編譯和鏈接命令寫入Makefile中,每回運行的時候執行一下make命令,它就會把你的執行程序給生成出來。如果你要修改的話,那你只要修改完之後在執行下make命令即可,是不是很方便?(嘿嘿),其實學會了make和Makefile的使用對你對編程的學習效率和以後工作效率都有很大幫助,下面來看看它們使用方法吧:

  我已進度條這個小程序爲例,關於進度條大家肯定不陌生,只要是上過網的都見過,它的代碼原理也很簡單,我讓它每過一個規定的時間,就刷新一個'#',後面跟上百分比。刷新的時候只在當前行,所以每次要回車,代碼如下:

#include<stdio.h> 
#include<string.h> 
  void proc() 
 { 
     char str[102]; 
     char s[]={'|','/','-','\\'}; 
     memset(str,'\0',sizeof(str)); 
    int count=100; 
     int i=0; 
    for(;i<=count;++i) 
     { 
        str[i]='#'; 
         printf("[%-100s][%d%%][%c]\r",str,i,s[i%4]); 
         usleep(100000); 
         fflush(stdout); 
     } 
     printf("\n"); 
      return; 
  } 
  int main()
  {
     proc();
     return 0; 
  }

結果由於是動態的,這裏不好發圖,就不展示了,我們還是看後面的Makefile怎麼編寫吧,這纔是重點。

上面是一個已經寫好的源文件叫proc.c,它生成應用程序proc要經過下面的過程:

wKiom1dNfibydcuGAAANbBgUM_0565.png

Makefile的編寫要把握住兩個點:依賴關係和依賴方法

就那上面的程序來說,我們最後要生成proc的程序,proc要通過proc.o來生成,可是現在沒有proc.o,所以就在往後看proc,o是由proc.s生成,接着往下推就會發現我們推到peoc.c,因爲proc.c是存在的,因此它可以生成proc.i,然後再往上推,最後就可以生成proc這個程序了。

上面這個就是整個程序的依賴關係,而依賴方法就是我們所使用的命令啦,下面是proc.c的Makefile的編寫:

wKioL1dNg3yDRnQUAAAxHIiXmkM627.png

先是依賴關係,然後是依賴方法,寫依賴關係時目標文件在前,依賴文件在後

還有一點需要提醒的是在寫依賴方法時,前面要加Tab

在Makefilr中有一個不成文的規定:

每一個Makefile中都要有清空目標文件的能力

畢竟自己寫的東西要自己負責嘛,如果麼有的話,你的程序改完後還是要將之前的程序刪掉,這樣不好管理,有時還會坑到別人,所以要有這個“修養”!

清理目標文件的方法就是先用.PHONY創建一個“僞目標”,我上面的clean就是一個僞目標,再給僞目標定義方法,也就是刪除目標文件的命令。

還有規定claer必須放在文件最後!

接下來就是執行我們的make命令來看看效果了,這裏先說下make是怎麼工作的哈:

當make執行起來後,會找當前目錄下的Makefile文件,然後找第一個目標文件,並把它作爲最終文件,並通過你給的依賴方法生成最終文件,然後停止。

由於我們的clean和最終文件沒有半毛錢關係,所以想要執行clean,就要用make命令進行顯示調用才起作用。

我們可以通過上面的例子來看看make的效果:

首先先執行make

wKiom1dNi5qR2OHXAABeRyFmvyE563.png

這時候出現proc,說明文件成功被編譯鏈接。

然後我們再用make顯示執行下clean:

wKiom1dNjHrgXeHzAAA8KydsH8A702.png

proc程序也就消失了

這就是make和Makefile的基本用法,還是很方便的,希望大家看完之後對你們有所幫助,在說拜拜之前,補充下如果想在終端顯示依賴方法的話,就把前面的@去掉哦!

好了,再了個見吶!

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