MAKEFILE編寫學習--1
阿新 • • 發佈:2018-11-18
makefile是在編譯中大型程式中使用的自動化編譯工具make
依賴的指令檔案。這樣可以使得程式的編譯更加便捷快速。
makefile的一般規則如下:
target ... : prerequisites ...
command
target
即是一個目標檔案,它可以是可執行程式、目標中間檔案、標記(label)等。這個目標要想編譯出來需要的前提條件就是prerequisites
這些已存在的檔案。編譯過程中的規則則是由command
裡面的各個命令組成。command
以一個Tab
起頭。make
會比較目標檔案與條件中的檔案更新時間,一旦有檔案被修改,make
就會依賴於這些前提檔案進行重新編譯。makefile
target
會被認為是make
的預設目標。當
prerequisites
是空的時候,前面的目標檔案被當成一個命令,使用make
執行時會直接執行command
裡的命令。
clean :
rm edit main.o kbd.o command.o display.o \
insert.o search.o files.o utils.o
執行這個make clean
會將當前資料夾下的幾個中間檔案刪除掉。
makefile
中可以使用變數,類似於C語言中的巨集:
edit : main.o kda.o command.o gcc -o edit main.o kda.o command.o
這裡面如果要向edit
的依賴項中新增檔案,那麼也得向command
中加入同樣的檔案,makefile
一大,就很難批量處理,這時候可以宣告變數:
objects = main.o kda.o command.o
那麼上面的makefile可以改成:
objects = main.o kda.o command.o
edit : $(objects)
gcc -o edit $(objects)
通過美元符號$(變數名)
的方式來引用變數。
make
工具會.o
檔案對應的.c
檔案自動的新增到依賴關係中。如果找到一個foo.o
,那麼對應的foo.c
就會自動的加入到依賴關係並且會在command
gcc -o
。那麼foo,o
的生成就可以簡寫為:
foo.o : other_files_list
其中的command
直接就不用寫了。
.PHONY
用來修飾target
,表示它是一個“偽目標”。
總結:
- 顯式規則
- 隱式規則
- 變數定義
- 引用檔案
- 註釋
makefile中只有行註釋,註釋以#
開頭。