GNU make有一些內建函式讓我們處理上方便些,函式呼叫的格式是
例如
$(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裡面的前置處理
在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吧。