Можно ли установить CFLAGS в модуль Makefile ядра Linux?
Например: общий модуль устройства Makefile
obj-m:=jc.o
default:
$(MAKE) -C /lib/modules/$(shell uname -r)/build M=$(shell pwd) modules
clean:
$(MAKE) -C /lib/modules/$(shell uname -r)/build M=$(shell pwd) modules clean
Я рассматриваю, могу ли я установить CFLAGS в файл. Когда я меняю раздел по умолчанию на
$(MAKE) -O2 -C /lib/modules/$(shell uname -r)/build M=$(shell pwd) modules
Но это не сработало.
Любая помощь? Большое спасибо.
Ответы
Ответ 1
-O2
будет вариантом make
(или $(MAKE)
, как вы его используете) в том, что вы пробовали. Очевидно, что компилятору (возможно, gcc
) нужен этот флаг, а не make
.
Kbuild понимает переменную make с именем CFLAGS_modulename.o
для добавления определенных флагов C при компиляции этого устройства. В вашем случае ваш объект модуля будет jc.o
, поэтому вы можете указать:
CFLAGS_jc.o := -O2
и он должен работать. Добавьте V=1
в свои строки $(MAKE)
, чтобы получить подробный вывод, и вы должны увидеть -O2
, когда компилируется jc.c
.
Подробнее о компиляции модулей в официальной документации.
Ответ 2
Вы также можете использовать
ccflags-y := -O2
Это будет применяться ко всем исходным файлам, скомпилированным для вашего модуля с помощью Makefile. Это косвенно документировано в ссылке, предоставленной eepp в Раздел 4.2