В ccflags-y
для ссылки на «текущий» каталог (где находится ваш Makefile
) используйте конструкцию $(src)
:
ccflags-y := -I$(src)/src/headers
НЕправильно ссылаться на этот каталог с помощью $(shell pwd)
: когда модуль построен, текущий каталог относится к дереву сборки ядра , а не к каталогу с вашим Makefile
.
Помните: ваш Makefile
- это проанализировано дважды :
- Когда вы вызываете
make
из исходного каталога модуля. - Когда выполняется строка
$(MAKE) -C $(BUILDDIR) M=$(shell pwd) modules
.
В первый раз ваш Makefile
обрабатывается обычным способом, при этом pwd
расширяется до исходного каталога модуля . В этот раз Make выполняет all
цель и любую другую цель, от которой зависит. Например, в этот раз Make выполняет вашу цель print_file_vars
, которая выводит значение переменной SRCS_H
, и вы обнаруживаете, что эта переменная правильная.
Второй раз ваш Makefile
обрабатывается как часть большего Makefile с pwd
расширен до каталога сборки ядра . Используются только временные переменные obj-m
, ccflags-y
и другие переменные, например *-m
или *-y
, поэтому вы не можете использовать pwd
для этих переменных.