0 基本格式
目標:依賴
(Tab)指令
1 變量
變量定義:objects = main.o command.o utils.o
變量使用:$(objects)
2 僞目標
.PHONY : clean // .PHONY表示 clean爲僞目標
clean :
-rm edit $(objects) //"-"表示:也許某些文件出現問題,但不要管,繼續做後面的事
一般情況下,一個僞目標不作爲另外一個目標的依賴。然而當僞目標作爲某個目標
的依賴時,其命令體都會被強制執行.
如:FORCE
3 指定特定的 Makefile
最好使用Makefile,不建議使用makefile,
在指定特定的Makefile時:
使用 make 的
“-f”和“–file”參數,如:make -f Make.Linux 或 make --file Make.AIX
4 make的工作流程
GUN make的執行過程分爲兩個階段。
- 第一階段:讀取所有的 makefile 文件,內建所有的變量、明確規則和隱含規則,
並建立所有目標和依賴之間的依賴關係結構鏈表。
- 依次讀取變量 “MAKEFILES” 定義的 makefile 文件列表。
- 讀取工作目錄下的 makefile 文件,依據文件名依次查找: GNUmakefile,
makefile, Makefile ,首先找到哪個就讀取哪個。 - 依次讀取工作目錄 makefile 文件中使用指示符 “include” 包含的文件。
- 查找重建所有已讀取的 makefile 文件的規則(如果存在一個目標( target )是當
前讀取的某一個 makefile 文件,則執行此規則重建此 makefile 文件,完成以
後從第一步開始重新執行)。 - 初始化變量值並展開那些需要立即展開的變量和函數並根據預設條件確定執
行分支。
- 第二階段:根據第一階段已經建立的依賴關係結構鏈表和最終目標決定哪些目標
需要更新,並使用對應的規則來重建這些目標。
- 根據最終目標(缺省的或指定的)以及依賴關係遞歸建立依賴關係鏈表。
- 執行最終目標的依賴關係鏈表(和建立依賴關係鏈表的順序相反)。
- 執行最終目標所在的規則。
5 查看隱含規則與隱含變量
輸出到file裏,規則,變量太多了。
make -p -f /dev/null | >> file
查了好久的CURDIR,MAKE變量終於找到了
# environment
GDMSESSION = ubuntu
# environment
XMODIFIERS = @im=ibus
# makefile
CURDIR := /home/hedy/u-boot
# makefile
SHELL = /bin/sh
# environment
NM = arm-poky-linux-gnueabi-nm
...
# default
MAKE = $(MAKE_COMMAND)
...
# default
MAKE_COMMAND = make