Makefile编写规则
1 | |
KDIR := /lib/modules/$(shell uname -r)/build
这行代码是一个 Makefile 中的变量赋值语句,用于指定内核源码的路径。
KDIR是一个变量,用于存储内核源码的路径。:=操作符用于进行变量的赋值,它会立即展开变量的值。/lib/modules/$(shell uname -r)/build是一个路径,它使用了$(shell uname -r)命令来获取当前系统正在运行的内核版本,并将其用于构建内核源码的路径。
因此,这行代码的作用是定义一个变量 KDIR,并将其设置为当前系统正在运行的内核版本对应的内核源码路径。通常,这个路径会是 /lib/modules/当前内核版本/build。1
pwd := $(shell pwd)
这行代码是一个 Makefile 中的变量赋值语句,用于获取当前工作目录的路径并将其存储在一个变量中。
pwd是一个变量名,它用于存储当前工作目录的路径。:=操作符用于进行变量的赋值,它会立即展开变量的值。$(shell pwd)是一个命令替换,它会执行 pwd 命令以获取当前工作目录的路径,并将其返回作为变量的值。
因此,这行代码的作用是定义一个变量 pwd,并将其设置为当前工作目录的路径。这行代码是一个 Makefile 中的变量赋值语句,用于指定要编译的内核模块的源文件。1
obj-m := helloworld.oobj-m是一个内核模块编译时的特殊变量,它告诉内核构建系统需要编译的模块。:=操作符用于进行变量的赋值,它会立即展开变量的值。helloworld.o是要编译的内核模块的源文件。这意味着在当前目录下应该有一个名为helloworld.c或者helloworld.cpp的源文件,它将被编译成名为helloworld.o的目标文件,作为一个内核模块进行加载。
通常,obj-m 变量用于告诉内核构建系统要编译哪些模块。每个模块都会对应一个 .o 文件,这些文件最终会被链接到内核中,成为可加载的内核模块。这个命令是一个 make 命令,用于在指定的内核源码目录1
make -C $(KDIR) M=$(PWD) modules($(KDIR))中编译当前目录($(PWD))下的模块。这通常用于编译 Linux 内核模块。
具体来说:- make 是一个构建工具,用于执行 Makefile 中定义的规则。
-C $(KDIR)指定了要进入的目录,即内核源码目录。M=$(PWD)指定了要编译的模块所在的目录,即当前目录。modules是 Makefile 中的一个目标,表示要编译模块。s
因此,这个命令会进入内核源码目录,执行内核源码目录中的 Makefile 中的规则,编译当前目录下的模块。
Makefile编写规则
http://example.com/2024/03/20/Makefile编写规则/