簡體   English   中英

Makefile 警告標志 Linux 內核模塊

[英]Makefile warning flags Linux kernel module

我正在使用這個Makefile來構建我的樹外內核模塊。 (該模塊僅包含一個源文件。)我想使用比默認情況下更多的警告標志。 問題是標准的 Linux 頭文件(如#include <linux/module.h> )也會被檢查警告,因此會輸出大量警告。 如何修改此 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

一般來說,對於編譯器來說,頭文件是源文件的一部分 它已被預處理器粘貼在那里。 因此,很難為源文件啟用警告,而不是為它包含的標頭啟用警告。 (我知道 MSVC 為此提供了一些#pragma s,不確定 GCC 是否有類似的功能。)

由於您的模塊看起來相當小,您可以自己進行必要的聲明而不包括標題。 這實際上取決於您使用的標頭數量。

例如,要使用printf()而不實際包含<stdio.h>

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

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

當然,您的聲明必須與您要避免的標題中的聲明相匹配,否則您將在鏈接時遇到麻煩。

感謝nos的評論。 診斷 Pragma 工作。

請注意,忽略的警告應用作原始警告。 所以標志-Wno-declaration-after-statement應該變成:

#pragma GCC diagnostic ignored "-Wdeclaration-after-statement"

你可以參考GCC Diagnostic Pragmas

以下是基本用法。

#pragma GCC diagnostic error "-Wuninitialized"
  foo(a);                       /* error is given for this one */
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wuninitialized"
  foo(b);                       /* no diagnostic for this one */
#pragma GCC diagnostic pop
  foo(c);                       /* error is given for this one */
#pragma GCC diagnostic pop
  foo(d);                       /* depends on command-line options */

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM