Что означает флаг make-файла GNU "-m" и как он работает в строке "Obj -m + = simple.o"? - PullRequest
0 голосов
/ 18 января 2019

Я прохожу курс обучения по операционным системам, и нас попросили объяснить синтаксис данного make-файла.Однако у меня возникают проблемы с пониманием содержания:

Obj -m += simple.o

all:
        make -C/lib/modules/$(shell uname -r)/build M=$(PWD) modules

clean:
        make -C/lib/modules/$(shell uname -r)/build M=$(PWD) clean

Основная часть, которую я не понимаю, - это первая строка.Из того, что я знаю, «Obj» - это имя переменной, «-m» - это флаг, «+ =» - оператор конкатенации, «simple.o» - это объектный файл.Хотя я знаю части, я не знаю, что делает эта линия.Я много искал, но не могу найти объяснения флага "-m".Он появился только в одном списке, объясняющем, что компилятор знает, что его игнорировать, см. Здесь https://www.gnu.org/software/make/manual/html_node/Options-Summary.html. Может кто-нибудь объяснить, что означает и делает эта строка?

Спасибо за вашу помощь.

1 Ответ

0 голосов
/ 18 января 2019

Это make-файл Linux kbuild для модуля вне ядра. Как указал @MadScientist, ваша первая строка должна выглядеть так:

obj-m += simple.o

В контексте Linux kbuild это означает «скомпилировать и связать simple.c с модулем». Цель all (цель по умолчанию) построит модуль на основе версии ядра, на которой вы в данный момент работаете.

ПРИМЕЧАНИЕ: вам потребуется установить заголовки разработки ядра для успешной сборки модуля.

РЕДАКТИРОВАТЬ: внутри дерева ядра Linux вы также найдете обозначение obj-y += X, которое означает «компилировать и связывать X в ядре, когда эта конфигурация ядра включена».

...