1. 程式人生 > >MAKEFILE編寫學習--1

MAKEFILE編寫學習--1

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中只有行註釋,註釋以#開頭。