obj-m := hello.o
PWD
==================================================================================
例子分析:
ifeq ($(KERNELRELEASE),)
# KERNELRELEASE 這個變數一開始並沒有定義, 所以先跑到這邊
KERNELDIR ?= /root/kernel/2.6/linux-2.6.14
PWD := $(shell pwd)
# 如果直接下 make or make modules 會執行這個 rule
# 這個 rule 是在執行 make 指令,不過它有加其他的參數
# -C dir: 執行 make 前先跳到 $(KERNELDIR) ---> 所以此時 make 所讀的 Makefile 為
# $(KERNELDIR)下的 Makefile (也就是原碼樹的 Makefile)
# M=$(PWD): 這是給$(KERNELDIR)下的 Makefile 的一個環境變數 ---> $(KERNELDIR)下的 Makefile
# 中後來會根據這個 M 的值執行 $(M) 下的 Makefile, 所以這個 Makefile 總共被執行 2 次
modules:
modules_install:
clean:
.PHONY: modules modules_install clean
else
# 第 2 次時,由於 KERNELRELEASE 已經在$(KERNELDIR)下的 Makefile 被定義所以會跑到 else
# 底下這行是 2.6 的 kbuild 定義的語法,詳情請讀原碼樹的 Documentations/kbuild/modules.txt
endif