我对 make 文件有一个小疑问,这里是代码:
KERNEL_VERSION := $(shell uname -r)
KERNEL_MODLIB := /lib/modules/$(KERNEL_VERSION)
KERNEL_SOURCES := $(shell test -d $(KERNEL_MODLIB)/source && echo $(KERNEL_MODLIB)/source || echo $(KERNEL_MODLIB)/build)
CPPFLAGS += -DDRIVER_ERROR -DDRIVER_DEBUG
obj-m := main.o
KDIR := $(KERNEL_SOURCES)
PWD := $(shell pwd)
default:
$(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules
clean:
$(RM) main.ko.unsigned main.mod.c main.mod.o main.o modules.order module.symvers .main* .tmp_versions/*
我想知道这段代码有什么作用:
$(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules
提前谢谢~~
答案1
该命令改变到目录$(KDIR)
并从那里运行 make 来构建目标modules
。
$(MAKE)
是一个运行 make 可执行文件的宏。之所以使用 (而不是仅仅使用make
)是因为可执行文件可能有不同的名称。
-C <directory>
在运行 make 之前对某个目录进行更改。
SUBDIRS=<variable>
SUBDIRS
在运行 make 时定义变量。
modules
表示它将尝试构建该目标。