2015-01-23 2 views
0

Я использую этот Makefile для создания моего модуля ядра из дерева. (Модуль состоит только из одного исходного файла.) Я хочу использовать больше предупреждающих флагов, чем те, которые поступают по умолчанию. Проблема в том, что стандартные заголовки Linux (например, #include <linux/module.h>) также проверяются на наличие предупреждений, и поэтому выводится множество предупреждений. Как я могу изменить этот Makefile, чтобы стандартные заголовки Linux не проверялись на предупреждения?Предупреждающие флаги Makefile Linux-модуль ядра

# to build the module: make module=mymodulename 
# to clean: make clean 

obj-m += $(module).o 

# extra warning flags 
ccflags-y := -fdiagnostics-show-option -Wall -Wextra -Wdouble-promotion -Wformat=2 -Winit-self -Wmissing-include-dirs -Wswitch-default -Wswitch-enum -Wunused -Wstrict-overflow=5 -Wno-div-by-zero -Wtrampolines -Wfloat-equal -Wundef -Wno-endif-labels -Wshadow -Wunsafe-loop-optimizations -Wsync-nand -Wbad-function-cast -Wcast-qual -Wcast-align -Wwrite-strings -Wconversion -Wjump-misses-init -Wlogical-op -Waggregate-return -Wstrict-prototypes -Wold-style-definition -Wmissing-noreturn -Wmissing-format-attribute -Wnormalized=nfc -Wpacked -Wpadded -Wredundant-decls -Wnested-externs -Wunreachable-code -Winline -Winvalid-pch -Wdisabled-optimization -Wmissing-prototypes -Wmissing-declarations -Woverlength-strings -Wunsuffixed-float-constants 
# disable some warning flags 
ccflags-y += -Wno-declaration-after-statement -Wno-missing-prototypes -Wno-missing-declarations -Wno-cast-qual -Wno-sign-conversion -Wno-conversion 
# enable some extra warning flags 
KBUILD_ENABLE_EXTRA_GCC_CHECKS := 3 
# increase verbosity 
KBUILD_VERBOSE := 1 

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

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

ответ

0

Вообще говоря, для компилятора жатка часть исходного файла. Он был вставлен там препроцессором. Поэтому будет сложно включить предупреждения для исходного файла, но не заголовки, которые он включает. (Я знаю, что MSVC предоставляет некоторые #pragma с для этого, не уверен, что если GCC имеет сходные черты.)

Поскольку ваш модуль оказывается достаточно мал, вы могли бы сделать необходимые заявления себя и не включают заголовки. Это зависит от того, сколько из заголовков вы используете.

Например, чтобы использовать printf() фактически не включая <stdio.h>:

int printf(const char * format, ...); 

int main() 
{ 
    printf("Hello, %s.\n", "world"); 
    return 0; 
} 

Конечно, ваши заявления должны совпадать с заголовком вы избегаете, или вы получите в неприятности во время компоновки.

+1

gcc имеет для этого также прагмы: https://gcc.gnu.org/onlinedocs/gcc/Diagnostic-Pragmas.html – nos

+0

@nos: Nice! Вы знаете, это, вероятно, очень хорошо ответит на вопрос OP ... ;-) – DevSolar

Смежные вопросы