
У меня есть небольшой вопрос по 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
означает, что он попытается достичь этой цели.