Как передать параметры компилятора во время компиляции ядра Linux?
По причинам, мне нужно скомпилировать ядро Linux (в настоящее время 4.7.10), передавая некоторые простые и невинные дополнительные параметры командной строки (например, -pipe -Wsomething
и т. д.) компилятору Си.
Как мне это сделать?
Более конкретно, как мне применить эти флаги компилятора во время простого make
а также во время make menuconfig
и аналогичные, т. е. чтобы они всегда передавались компилятору C при каждом его выполнении.
PS: прошу вас, пожалуйста, не спрашивать меня о деталях, почему мне нужно что-то столь глупое, как это. Удовлетворительное объяснение этого, вероятно, заняло бы несколько часов, чтобы написать, что не является одним из моих лучших навыков.
1 ответ
Из файла сборки ядра Linux:
# Add any arch overrides and user supplied CPPFLAGS, AFLAGS and CFLAGS as the
# last assignments
KBUILD_CPPFLAGS += $(ARCH_CPPFLAGS) $(KCPPFLAGS)
KBUILD_AFLAGS += $(ARCH_AFLAGS) $(KAFLAGS)
KBUILD_CFLAGS += $(ARCH_CFLAGS) $(KCFLAGS)
Таким образом, передача дополнительных опций для Kbuild использует обычные переменные среды /makefile, но с K
префикс:
make "KCFLAGS=-pipe -Wsomething"
Kbuild - документация ядра Linux предоставляет список опций,
KCPPFLAGS
Дополнительные параметры, передаваемые при предварительной обработке. Параметры предварительной обработки будут использоваться во всех случаях, когда kbuild выполняет предварительную обработку, включая сборку файлов C и файлов ассемблера.
КАФЛАГИ
Дополнительные опции к ассемблеру (для встроенных и модулей).
AFLAGS_MODULE
Дополнительные возможности ассемблера для модулей.
AFLAGS_KERNEL
Дополнительные возможности ассемблера для встроенного.
KCFLAGS
Дополнительные опции к компилятору C (для встроенных и модулей).
CFLAGS_KERNEL
Дополнительные параметры для $(CC) при использовании для компиляции кода, который компилируется как встроенный.
CFLAGS_MODULE
Дополнительные параметры модуля для использования для $(CC).
LDFLAGS_MODULE
Дополнительные параметры, используемые для $(LD) при компоновке модулей.
HOSTCFLAGS
Дополнительные флаги, передаваемые в $(HOSTCC) при создании хост-программ