linux 内核模块编译,适配GCC版本

有时候内核源码树外的内核模块编译时,需要适配多个版本linux电脑的多个GCC版本,如果是同一套代码,在使用的额外编译参数时,会导致低版本不认识高版本GCC的参数。这样在移植上就会产生问题。

可用如下方法在源码Makefile中解决。

GCC_VER_GTE5 := $(shell expr `$(CC) -dumpversion | cut -f1 -d.` \>= 5)
GCC_VER_GTE8 := $(shell expr `$(CC) -dumpversion | cut -f1 -d.` \>= 8)
GCC_VER_GTE11 := $(shell expr `$(CC) -dumpversion | cut -f1 -d.` \>= 11)

ifeq ($(GCC_VER_GTE5),1)
ccflags-y += -Wno-discarded-qualifiers
endif
ifeq ($(GCC_VER_GTE8),1)
ccflags-y += -Wno-missing-attributes -Wno-frame-larger-than -Wno-missing-prototypes -Wno-missing-declarations
endif
ifeq ($(GCC_VER_GTE11),1)
ccflags-y += -Wno-zero-length-bounds
endif