
Ich habe eine kleine Frage zu einer Make-Datei, hier ist der Code:
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/*
Ich möchte wissen, was dieser Code macht:
$(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules
Danke für den Vorschuss~~
Antwort1
Der Befehl wechselt in das Verzeichnis $(KDIR)
und führt von dort aus „make“ aus, um das Ziel zu erstellen modules
.
$(MAKE)
ist ein Makro, das die ausführbare Datei make ausführt. Der Grund dafür (anstatt einfach zu verwenden make
) ist, dass diese ausführbare Datei verschiedene Namen haben könnte.
-C <directory>
Änderungen an einem bestimmten Verzeichnis vor dem Ausführen von make.
SUBDIRS=<variable>
definiert die Variable SUBDIRS
beim Ausführen von make.
modules
bedeutet, dass versucht wird, dieses Ziel zu erstellen.