Chapter 5. Makefile撰寫

Table of Contents
簡介
組成元素
內隱規則(Implicit Rules)
其它

簡介

寫程式寫很大時,我們會分成好幾個模組,就是一個個的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 clean
      
make會另外叫起一個shell來執行command這裡面的字串也就是rm *.o。 如果給
$ make edit
      
make會去檢查需要的先決條件(prerequiste)發現有個檔名target command.o 存在,會依序根據規則來編譯。