Makefile----簡單編寫

1.介紹


1.1 Markfile規則

target(目標文件) … : prerequisites(所須要的文件或是目標) …
command(編譯規則)

核心的內容:target 這一個或多個的目標文件依賴於prerequisites 中的文件,其生成規則定義在 command 中。說白一點就是說,prerequisites中若是有一個以上的文件比 target 文件要新的話,command 所定義的命令就會被執行。這就是 Makefile 的規則。ruby

1.2.舉例

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

1.3 變量

定義spa

objects = main.o kbd.o command.o display.o \
insert.o search.o files.o utils.o

使用code

$(objects)

1.4 GNU自動推導

只要 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):也許某些文件出現問題,但不要管,繼續作後面的事

1.4 註釋:

用「#」字,須要注意的是,makefile中的命令必須以【Tab】開始asm

相關文章
相關標籤/搜索