makefile的注释
#TAGET代表应⽤程序
TARGET          = test_xxx
#交叉编译连前缀
CROSS_COMPILE  = arm-linux-
#交叉编译⼯具arm-linux-gcc
CC              = $(CROSS_COMPILE)gcc
#如果KERNELRELEASE==空,注意逗号后⾯不加参数表⽰KERNELRELESE未设置为空
ifeq ($(KERNELRELEASE),)
#设置KERNELDIR为/root/kernel/linux-2.6.24.4,?=代表的意思为,如果KERNELDIR已设置则不作任何处理,如果未设置则赋予?=后⾯的值
#  KERNELDIR ?= /root/kernel/linux-2.6.24.4
KERNELDIR ?= /root/test/linux-2.6.24.4
#PWD代表当前路径,:=代表⼀经赋值不在改变,功能类似宏定义;shell pwd代表在shell输⼊pwd命令中取得的路径
PWD := $(shell pwd)
#第⼀个⽬标all由应⽤程序$(TARGET)和驱动模块modules两部分组成
all:  $(TARGET) modules
#应⽤程序的⽣成⽅法,arm-linux-gcc -o test_xxx test_xxx.c
$(TARGET):
$(CC) -o $(TARGET) $(TARGET).c
>>>>>>>>>>>>>>>>>>>>>>>### #驱动模块的⽣成⽅法, make -C /root/kernel/linux-2.6.24.4 M=$(PWD) modules                                            #
#                                                                                                                    #
#此语句可如下解释:                                                                                                  #
#    主句为:make modules                                                                                            #
#    -C /root/kernel/linux-2.6.24.4为设置当前路径                                                                    #
#    M=$(PWD)语法意思为,声明⼀个变量M,并且给其赋值为$(PWD);语义意思为,在 $(PWD)⽬录下寻驱动模块                #
#                                                                                                                    #
#此语句的执⾏流程为:                                                                                                #
#    当前的makefile⽂件调⽤$(KERNELDIR)下的makefile,并且M变量对$(KERNELDIR)的makefile可见,执⾏编译驱动模块的功能  #
#                                                                                                                    #
>>>>>>>>>>>>>>>>>>>>>>>###
modules:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
#删除已⽣成的⽬标⽂件
clean:
rm -rf *.o *.ko *.mod.c $(TARGET)
#容错处理
.PHONY:  modules clean
#定义为obj-m模块⽅式
makefile phonyelse
obj-m := xxx.o
endif

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。

发表评论