make學習筆記(一)

2021-07-14 15:20:47 字數 1459 閱讀 5516

1、   由於實際開發中,乙個程式往往是由多個原始檔組成的,所以單用gcc除錯往往是很麻煩的,加上若在除錯過程中只修改了部分原始檔,用gcc命令編譯的話會將連同沒被修改的原始檔一起編譯,這大大地降低了編譯效率,由此引入了make工程管理器。

2、   make是乙個半自動化的工程管理器,它需要依賴makefile對程式進行編譯。他有以下兩方面的優越性;

(1)   使用方便;通過命令make就可以啟動make工程管理器進行編譯,不需要每次敲很多的命令列;

(2)   除錯效率高;make 每次都會檢查原始檔的時間戳,make只對上次編譯修改後的原始檔進行編譯,這樣就大大提高了編譯效率。

3、   makefile(指令碼檔案)—是一種指令碼語言,因為是批處理,一般用來做測試檔案,常用語言有python,shell…

makefile檔案由以下三部分組成:

需要生成的目標檔案(target file);生成目標檔案所要的依賴檔案(dependency file);生成目標檔案的編譯規則命令列;

按以下方式進行組織:

target file:dependency file

command

在command命令行前加乙個鍵

make能實現自動編譯,即他不僅能自動按照規則編譯,還觀察時間戳,觀察檔案是否修改;

如:編譯乙個具有加減乘除功能的計算器,製作其makefile如下所示:

然後make一下:

在編譯多個程式時,make的優勢就逐漸顯現出來了;

4.make中的偽指令:

如下圖所示:

執行一下:

5.makefile中的變數

在makefile檔案中,存在著大量的檔名,而且這些檔名都是重複出現的。所以在makefile中提供變數來代替檔名。

變數使用方式如下:

$(變數名)

例如:如此,若編譯時有錯,則只需修改變數處即可,提高了**編譯的時間。

此外,make工程管理器還提供了許多變數定義方式:

(1)   通過「=」來實現

(2)   通過「:=」來實現,但前面的變數不能通過後面的變數來定義

(3)   通過「+=」來實現,可以給變數追加值

(4)   通過「?=」來實現,若變數1前面定義過,則後面的定義會失效;

如:a1:= a.o

a1?=b.o

此時a1 的值為a.o

make學習筆記

編寫makefile makefile檔案命令開始不是空格,是tab鍵 make命令會自動查詢當前目錄下名為的makefile的檔案,找到之後會解析makefile檔案,並執行檔案的內容。makefile檔案中的內容 執行make命令 makefile預設只執行第乙個標號,其他標號不執行,若要執行其...

make 學習筆記四

make之vpath 變數 vpath 的定義中,使用空格或者冒號 將多個目錄分開。make 搜尋的目錄順序 按照變數 vpath 定義中順序進行 當前目錄永遠是第一搜尋目錄 例如 vpath src headers 它指定了兩個搜尋目錄,src 和 headers 對於規則 foo foo.c 如...

make 學習體會 一

在對makefile進行了部分學習後,感覺到還是多看看簡短的例子比較好。hellomake.c 複製 include int main 複製 hellofunc.c 複製 include include void myprinthellomake void 複製 hellomake.h exampl...