Как установить директивы препроцессора в make-файле для цели сборки модуля ядра? - PullRequest
0 голосов
/ 10 января 2019

У меня есть модуль ядра, который я хотел бы собрать с любым из make, make debug, make test, где единственная разница между каждым из них - это опция -D для компилятора. По сути, это тот же вопрос, что и Создание цели отладки в make-файле модуля драйвера Linux 2.6 , но этот вопрос был помечен как отвеченный, и мой вопрос остается, после того, как я попробовал несколько других вещей.

Я попробовал устаревшую опцию EXTRA_CFLAGS в моем make-файле:

debug:
    $(MAKE) -C $(KDIR) M=$(PWD) EXTRA_CFLAGS="-DDEBUG" modules

, а также более новая опция ccflags-y (похоже, не работает даже за пределами цели debug):

ccflags-y := -DDEBUG
debug:
    $(MAKE) -C $(KDIR) M=$(PWD) modules

и установка CFLAGS непосредственно перед целью debug:

debug: CFLAGS_main.o=-DDEBUG
debug:
    $(MAKE) -C $(KDIR) M=$(PWD) modules

но единственный способ выполнить то, что я хочу, - это отдельный скрипт сборки:

#!/bin/sh

case "$1" in
    debug)
        make CFLAGS_main.o=-DDEBUG
        ;;  
    *)  
        make
        ;;  
esac

Нет ли способа сделать это непосредственно в make-файле при сборке модуля ядра ??

1 Ответ

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

Вы сможете использовать свою оригинальную версию, которая использовала EXTRA_CFLAGS, но просто замените EXTRA_CFLAGS на ccflags-y:

debug:
        $(MAKE) -C $(KDIR) M=$(PWD) ccflags-y="-DDEBUG" modules

или замените его на CFLAGS_main.o, чтобы применить CFLAGS к одному объекту:

debug:
        $(MAKE) -C $(KDIR) M=$(PWD) CFLAGS_main.o="-DDEBUG" modules

EDIT

Как упоминалось в OP Roger Dueck, установка переменных в командной строке make имеет глобальный эффект. Он переопределяет любую настройку тех же переменных в make-файлах, что может быть нежелательно, особенно для глобально используемой переменной, такой как ccflags-y. Чтобы избежать этого, используйте вашу собственную переменную makefile. В «нормальной» части Makefile, которая вызывает $(MAKE) в части «KBuild», измените цель debug: на следующую, используя произвольную переменную по вашему выбору (я использовал FOO_CFLAGS здесь):

debug:
    $(MAKE) -C $(KDIR) M=$(PWD) FOO_CFLAGS="-DDEBUG" modules

В части "KBuild" файла Makefile, вызываемого по вышеуказанному правилу, используйте следующее для добавления пользовательских CFLAGS от FOO_CFLAGS до ccflags-y:

ccflags-y += $(FOO_CFLAGS)
...