在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)
test_main.c中呼叫add函式
/*filename:test_main.c*/
#include "test.h"
#include main()
(備註一下: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清理所有目標檔案和可執行檔案:
如果上次make執行後沒有修改檔案,make命令將不會編譯。如果你想重新編譯可以使用 -b 選項
使用 -d選項列印除錯資訊
想檢視make真正執行過程可以使用-d選項
使用 -c 選項改變目錄
可以在不同的目錄路徑中使用make命令,比如你要使用make命令執行../ 目錄下的makefile檔案,可以使用-c選項
make命令會先切換到指定目錄下,在切換回來
make -f make_test
通過這種方式,make命令會選擇掃瞄make_test來代替makefile。 make命令 clean命令
先先看一下什麼是makefile makefile定義了一系列的規則來指定,哪些檔案需要先編譯,哪些檔案需要後編譯,哪些檔案需要重新編譯,甚至於進行更複雜的功能操作,因為 makefile就像乙個shell指令碼一樣,其中也可以執行作業系統的命令。makefile帶來的好處就是 自動化編譯 一旦寫好...
linux系統make命令用法
解釋 makefile定義了一系列的規則來指定,哪些檔案需要先編譯,哪些檔案需要後編譯,哪些檔案需要重新編譯,甚至於進行更複雜的功能操作,因為 makefile就像乙個shell指令碼一樣,其中也可以執行操作 系統的命令。makefile帶來的好處就是 自動化編譯 一旦寫好,只需要乙個make命令,...
linux中的make命令
make命令的選項和引數 k 它的作用是讓make命令在發現錯誤時仍然繼續執行,而不是在檢測到第乙個錯誤時就停下來。n 它的作用是讓make命令輸出將要執行的操作步驟,而不真正執行這些操作 f 它的作用是告訴make命令將哪個檔案作為makefile檔案。如果未使用這個選項,標準版本的make 命令...