Linux 命令---make命令,小白版通俗入門

   

     在make經典教程這篇文章中,對make講的很詳細,但是不太適合小白。

     一個程序語言,從一個個.h和.c文件變成包含0和1的可執行文件需要這麼幾個環節:

     源程序->預處理->編譯和優化->生成目標文件->鏈接->可執行文件。

      在linux上面我們可以用gcc編譯器:

      gcc -c生成目標文件,

     在用gcc -o將目標文件鏈接成可執行文件

      對於很少的文件我們可以一步步用gcc執行,但是一個大型複雜項目包含多個的文件,我們一步一步用gcc就太麻煩了,如果修改某

一個源文件,你再次執行make命令,它只是編譯與該文件相關的目標文件,因此編譯節約很多時間。

      Makefile需要按照一定的規則編寫,所需要執行的命令都是以Tab鍵開頭,用make就會自動執行。

     在VS中我們幾乎沒見過makefile,因爲一般情況下,只需要把需要的文件包含在project中,VS  會自動幫你把makefile寫好。

   例子來說明

  test.h用於聲明函數

     

/*filename:test.h*/
extern int add(int i,int j);

      test.c用於兩個整數的相加

/*filename:add.c*/
int add(int i,int j)
{
    return i+j;
}

      test_main.c中調用add函數

/*filename:test_main.c*/
#include "test.h"
#include  <stdio.h>
main()
{
  int a,b;
  a = 2;
  b = 3;
  printf("the sum of is %d\n",add(a,b));
}


(備註一下:extern可置於變量或者函數前,以表示變量或者函數定義在別的文件中,提示編譯器遇到此變量或函數時,在其他模塊中尋找定義。

在程序中取代#include “*.h”。)

Makefile的內容:

all:test

test:test_main.o test.o
        gcc test_main.o test.o -o test
test_main.o:test_main.c test.h
        gcc -c test_main.c -o test_main.o
test.o:test.c test.h
        gcc -c test.c -o test.o
clean:
        rm -rf *.o test


注意:Makefile裏面的命令是由Tab鍵開頭

使用make,就能看見make命令第一次創建的依賴以及實際的目標



如果你再次查看,目錄內容,裏面多了一些.o文件和執行文件:


執行test便可查看結果:


如果對test.c文件進行修改,再使用make編譯工程:


就只有test.o進行了編譯而main_test.o沒有重新編譯


可以使用clean清理所有目標文件和可執行文件:


所有的.o文件和執行文件都被清理了

通過 -B 選項讓所有目標總是重新建立

如果上次make執行後沒有修改文件,make命令將不會編譯。如果你想重新編譯可以使用 -B 選項

使用 -d選項打印調試信息

想查看make真正執行過程可以使用-d選項

使用 -C 選項改變目錄
可以在不同的目錄路徑中使用make命令,比如你要使用make命令運行../ 目錄下的Makefile文件,可以使用-C選項

make命令會先切換到指定目錄下,在切換回來

通過 -f選項將其它文件作爲Makefile

make -f make_test

通過這種方式,make命令會選擇掃描make_test來代替Makefile。

發佈了55 篇原創文章 · 獲贊 22 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章