Каков приоритет рекурсивного вызова make-файла? - PullRequest
0 голосов
/ 27 апреля 2020

с этим makefile:

# If KERNELRELEASE is defined, we've been invoked from the
# kernel build system and can use its language.
ifneq ($(KERNELRELEASE),)
obj-m := module.o
# Otherwise we were called directly from the command
# line; invoke the kernel build system.
else
KERNELDIR ?= /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
default:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
endif

У меня только один вопрос. Этот make-файл читается 2 раза. В первый раз он устанавливает $KERNELDIR и PWD - ветвь else. При втором чтении - возникает вопрос - только устанавливает $obj-m, но как? К моменту «второго» чтения сценарий должен вызвать Makefile в исходном каталоге (как вызывается с параметрами -C) и поэтому не может установить переменную obj-m в моем текущем каталоге (тот, что был ранее, он изменился на исходный каталог). через -C). Или второй вызов $(MAKE) наследует переменные?

1 Ответ

0 голосов
/ 27 апреля 2020

Обратите внимание, что опция, переданная суб-марке: M=$(PWD)

Это означает, что суб-марка знает рабочий каталог, в котором находится ваш make-файл (в его переменной $(M)), и может затем сделать что-то вроде include $(M)/Makefile для установки переменной obj-m.

...