其它

內建函式

GNU make有一些內建函式讓我們處理上方便些,函式呼叫的格式是
$(function arguments)
	
例如
$(subst from,to,text)
$(patsubst %.o,%.c,$(objects))
$(suffix src/foo.c src-1.0/bar.c hacks)
files := $(shell echo *.c)
	
其中最常用的是最後一個,把shell執行結果傳回Makefile做進一步處理

控制語法

GNU make 裡面可以有條件判斷後,決定要不要做設變數或make, 其實主要處理一些makefile內的變數與環境,例如
ifeq ($(CC),gcc)
  libs=$(libs_for_gcc)
else
  libs=$(normal_libs)
endif
	
判斷$(CC)這個內隱規則的變數是不是gcc然後選擇函式庫, 其中ifeq或者ifneq有四種寫法
ifneq (arg1, arg2) 
ifneq 'arg1' 'arg2' 
ifneq "arg1" "arg2" 
ifneq "arg1" 'arg2' 
ifneq 'arg1' "arg2" 
	
除了ifeq, ifneq還有ifdef, ifndef,很像c裡面的前置處理

遞迴make

在Makefile裡面叫make來用,請用$(MAKE),例如我們常在source code的 最上層打個make, 它會自動跑到底下所有的目錄去,裡面都有個Makefile,然後每個都做make。 例如
all:
	cd user;$(MAKE) $@
	cd kernel;$(MAKE) $@
	
所以,練習看Makefile吧,如果你有裝linux kernel source, 就去/usr/src/linux下看一下Linux Kernel的Makefile吧。