1. makefile簡單介紹: ▶ Windows系統里的 Visual studio/Dev C++等IDE工具(Integrated Development Environment)將C語言的預處理、編譯、彙編、鏈接等過程集成在一起,而在Linux系統下需要編寫GCC命令才能完成編譯操作。當項 ...
1. makefile簡單介紹:
▶ Windows系統里的 Visual studio/Dev C++等IDE工具(Integrated Development Environment)將C語言的預處理、編譯、彙編、鏈接等過程集成在一起,而在Linux系統下需要編寫GCC命令才能完成編譯操作。當項目文件很多時,效率太低了。因此採用Makefile的方法實現編譯的統一管理。
2. makefile的規則
目標
:目標依賴
命令
目標是最終想要的文件,一般為可執行文件
;目標依賴是生成可執行文件所依賴的文件
;命令一般為GCC命令
、shell命令
、鏈接命令
、objcopy命令
等。
目標的概念 | 解釋 |
---|---|
預設目標 | 當我們在make編譯時沒有給make指定要生成的目標,make就會選擇Makefile文件中的第一個目標作為預設目標 |
多目標 | 一個規則中也可以有多個目標,多個目標具有相同的生成命令和依賴文件 %.o:%.c |
偽目標 | 有時候我們設置一個目標,並不是真正生成這個文件,如上面的clean目標,而是僅僅為了執行某個操作。例如.PHONY clean |
3. makefile的目標依賴
makefile通過比較目標依賴文件和目標文件的更新時間,當依賴文件更新後,目標文件才會隨著編譯更新。
但有一個問題,目標依賴文件中的頭文件更新不會被記錄到,導致目標文件不會更新。這個問題可以通過gcc-M hello.c這個命令解決。
[xuanmiao@localhost Demo_makefile]$ gcc -M hello.c
hello.o: hello.c /usr/include/stdc-predef.h hello.h
4. makefile的自動變數
變數符號 | 含義 |
---|---|
$@ | 目標 |
$^ | 目標依賴 |
$< | 目標依賴列表的第一個依賴 |
$? | 所有目標依賴中被修改的文件 |