寫程式寫很大時,我們會分成好幾個模組,就是一個個的C或其他程式語言的
小檔案。make是編譯大量的source code一定要用到的工具,最常用的就是寫一個
Makefile,他會根據這裡面的目標(target)所定義的規則(rule)來做編譯的
動作,並創造出可執行的程式來。一般人都會說拿到source code不知從何
讀起,其實除了README等文件外,Makdefile是最能知道程式流程的檔案,
你可以看Makefile然後找到程式的入口檔案,一步步追下去,用我們在
編輯器講到的方法來追程式。不過現在Makefile越寫越專業越來越大也
不太容易看懂。
一個Makefile其實只是一堆的規則(rule)所組成。
一個規則的型式是這樣的
target:prequiste ; command
通常是寫成
target: prerequiste
command
command
command
|
如果一行不夠寫要分兩行,可以用\來變成兩行
底下是一個例子
Example 5-1. 簡單Makefile
SHELL=/usr/bin/bash
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
command.o :command.c command.h
$(CC) -o command.o command.c
clean:
@rm *.o *~
|
其中定義了SHELL這個變數,有3個目標(target)edit command.o clean,
雖然沒有定義CC這個變數,用了內定變數$(CC)去編譯程式。
如果給
make會另外叫起一個shell來執行command這裡面的字串也就是rm *.o。
如果給
make會去檢查需要的先決條件(prerequiste)發現有個檔名target command.o
存在,會依序根據規則來編譯。