target(目標文件) … : prerequisites(所須要的文件或是目標) …
command(編譯規則)
…
核心的內容
:target 這一個或多個的目標文件依賴於prerequisites 中的文件,其生成規則定義在 command 中。說白一點就是說,prerequisites中若是有一個以上的文件比 target 文件要新的話,command 所定義的命令就會被執行。這就是 Makefile 的規則。ruby
edit : main.o kbd.o command.o display.o \
insert.o search.o files.o utils.o
cc -o edit main.o kbd.o command.o display.o \
insert.o search.o files.o utils.o
main.o : main.c defs.h
cc -c main.c
kbd.o : kbd.c defs.h command.h
cc -c kbd.c
command.o : command.c defs.h command.h
cc -c command.c
display.o : display.c defs.h buffer.h
cc -c display.c
insert.o : insert.c defs.h buffer.h
...
clean :
rm edit main.o kbd.o command.o display.o \
insert.o search.o files.o utils.o
清除
:make clean,以此來清除全部的目標文件,以便重編譯ui
定義
:spa
objects = main.o kbd.o command.o display.o \
insert.o search.o files.o utils.o
使用
:code
$(objects)
只要 make 看到一個[.o]文件,它就會自動的把[.c]文件加在依賴關係中,若是 make
找到一個 whatever.o,那麼 whatever.c,就會是 whatever.o 的依賴文件。而且 cc -c
whatever.c 也會被推導出來。因此上面的例子也能夠像下面這樣寫:get
objects = main.o kbd.o command.o display.o \
insert.o search.o files.o utils.o
edit : $(objects)
cc -o edit $(objects)
main.o : defs.h
kbd.o : defs.h command.h
command.o : defs.h command.h
display.o : defs.h buffer.h
insert.o : defs.h buffer.h
search.o : defs.h buffer.h
files.o : defs.h buffer.h command.h
utils.o : defs.h
.PHONY : clean #表示clean是個僞目標文件
clean :
rm edit $(objects)
也能夠像下面這樣寫,不過依賴關係顯得很亂:it
objects = main.o kbd.o command.o display.o \
insert.o search.o files.o utils.o
edit : $(objects)
cc -o edit $(objects)
$(objects) : defs.h
kbd.o command.o files.o : command.h
display.o insert.o search.o files.o : buffer.h
.PHONY : clean
clean :
rm edit $(objects) #-rm edit $(objects):也許某些文件出現問題,但不要管,繼續作後面的事
用「#」字,須要注意的是,makefile中的命令必須以【Tab】開始
asm