
Tenho uma pequena dúvida sobre um arquivo make, aqui está o código:
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/*
Quero saber o que esse código faz:
$(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules
obrigado pelo avanço ~~
Responder1
O comando muda para o diretório $(KDIR)
e executa make a partir daí para construir o target modules
.
$(MAKE)
é uma macro que executa o executável make. A razão para isso (em vez de apenas usar make
) é que esse executável pode ter nomes diferentes.
-C <directory>
alterações em um determinado diretório antes de executar o make.
SUBDIRS=<variable>
define a variável SUBDIRS
ao executar make.
modules
significa que tentará construir esse alvo.