Make工具最主要也是最基本的功能就是通過makefile檔案來描述來源程式之間的相互關係並自動維護編譯工作。而makefile 檔案需要按照某種文法進行編寫,檔案中需要說明如何編譯各個源檔案並串連產生可執行檔,並要求定義源檔案之間的依賴關係。makefile 檔案是許多編譯器--包括 Windows NT 下的編譯器--維護編譯資訊的常用方法,只是在整合式開發環境中,使用者通過友好的介面修改 makefile 檔案而已。
當filea.c或a.h檔案在編譯之後又被修改,則 make 工具可自動重新編譯filea.o,如果在前後兩次編譯之間,filea.C 和a.h 均沒有被修改,而且test.o還存在的話,就沒有必要重新編譯。這種依賴關係在多源檔案的程式編譯中尤其重要。通過這種依賴關係的定義,make 工具可避免許多不必要的編譯工作。當然,利用Shell指令碼也可以達到自動編譯的效果,但是,Shell 指令碼將全部編譯任何源檔案,包括哪些不必要重新編譯的源檔案,而 make 工具則可根據目標上一次編譯的時間和目標所依賴的源檔案的更新時間而自動判斷應當編譯哪個源檔案。
---------------------------------------------------------
# Define a macro for the object files
OBJECTS= filea.o fileb.o filec.o
# Define a macro for the library file
LIBES= -LS
# use macros rewrite makefile
prog: $(OBJECTS)
cc $(OBJECTS) $(LIBES) -o prog
……
---------------------------------------------------------
---------------------------------------------------------
#Description file for the Make command
#Send to print
P=und -3 | opr -r2
#The source files that are needed by object files
FILES= Makefile version.c defs main.c donamc.c misc.c file.c \
dosys.c gram.y lex.c gcos.c
#The definitions of object files
OBJECTS= vesion.o main.o donamc.o misc.o file.o dosys.o gram.o
LIBES= -LS
LINT= lnit -p
CFLAGS= -O
make: $(OBJECTS)
cc $(CFLAGS) $(OBJECTS) $(LIBES) -o make
size make
$(OBJECTS): defs
gram.o: lex.c
cleanup:
-rm *.o gram.c
install:
@size make /usr/bin/make
cp make /usr/bin/make ; rm make
#print recently changed files
print: $(FILES)
pr $? | $P
touch print
test:
make -dp | grep -v TIME>1zap
/usr/bin/make -dp | grep -v TIME>2zap
diff 1zap 2zap
rm 1zap 2zap
lint: dosys.c donamc.c file.c main.c misc.c version.c gram.c
$(LINT) dosys.c donamc.c file.c main.c misc.c version.c \
gram.c
rm gram.c
arch:
ar uv /sys/source/s2/make.a $(FILES)
----------------------------------------------------------
通常在描述檔案中應象上面一樣定義要求輸出將要執行的命令。在執行了make命令之後,輸出結果為:
$ make
cc -c version.c
cc -c main.c
cc -c donamc.c
cc -c misc.c
cc -c file.c
cc -c dosys.c
yacc gram.y
mv y.tab.c gram.c
cc -c gram.c
cc version.o main.o donamc.o misc.o file.o dosys.o gram.o \
-LS -o make
13188+3348+3044=19580b=046174b