makefile :文件编译管理脚本,linux系统提供的一套编译管理工具。
1.执行make命令会自动调用makefile文件的内容。
2.自动检查代码是否更改,提高编译效率。
3.规则(注意按tab对齐)
目标文件 : 源文件
clean:
rm -rf xxxx
调用make clean时会执行clean:下的内容
宏定义:
SRC := xxx
CC ;=编译器的名自
INC:=头文件路径
LIB_PATH:=库文件的路径
LIB_NAME:=库的名字
makefile中的函数:
①
自动搜索函数:
wildcard
SRC:=$(wildcard *.c)
功能:搜索所有的.c文件
②自动替换函数:patsubst
OBJ:=$(patsubst %.c,%.o,$(SRC))
功能:把.c文件替换成.o文件
内核模块的makefile模板:
ifneq ($(KERNELRELEASE),) //第一次执行makefile时,
$(KERNELRELEASE)未被设置
my
module - objs := mymodule 1.o mymodule 2.o //my
module e.o由mymodule 1.o与mymodule 2.o连接生成
obj - m := mydouble.o //表示编译链接后将生成mymodule.o模块,即要插入内核的模块文件
else
PWD := $(shell pwd)
KVER := $(shell uname -r)
KDIR := /lib/modules/$(KVER)/build
或
TARGET = hello
KDIR = /lib/modules/$(shell uname -r)/build
PWD = $(shell pwd)
obj-m := $(TARGET).o
default:
make -C $(KDIR) M=$(PWD) modules
clean:
$(RM) *.o *.ko *.mod.c Module.symvers
default:make后默认执行的命令
$(MAKE) -C $(KDIR) M= $(PWD) //
-C $(KDIR)知名跳转到内核源码目录下读取哪里的makefile,
M= $(PWD)表明返回到当前目录继续读入、执行当前的makefile。当从内核源码目录返回时,
$(KERNELRELEASE)已被定义
clean: //如果make目标是clean,则直接执行clean标号后的操作,执行完rm命令后就结束了
rm -rf *.o * .mod.c * .ko * .symvers * .order * .markers * ~
endif