如何在 Makefile 中添加多个 Headers 文件路径?
How to add multiple Headers files path in a Makefile?
我正在尝试编译 uleds.c 驱动程序,此驱动程序包含存在于此路径下的多个文件:
/opt/poky-atmel/2.5.3/sysroots/cortexa5hf-neon-poky-linux-gnueabi/usr/src/kernel/include/linux
我现在想修改我的 Makefile 并添加此路径,以便我可以正确编译 uleds.c
这是我的 Makefile :
#CC=arm-poky-linux-gnueabi-gcc -march=armv7-a -marm -mfpu=neon -mfloat-abi=hard -mcpu=cortex-a5 --sysroot=/opt/poky-atmel/2.5.3/sysroots/cortexa5hf-neon-poky-linux-gnueabi
#CC="gcc"
obj-m += uleds.o
KERNEL_SOURCE := /opt/poky-atmel/2.5.3/sysroots/cortexa5hf-neon-poky-linux-gnueabi/lib/modules/4.14.73-linux4sam-6.0-dirty
default:
${CC} ${KERNEL_SOURCE} uleds.c
clean:
${CC} $(INC) ${KERNEL_SOURCE} clean
有什么建议吗?谢谢
最简单的是:
${CC} -I/opt/poky-atmel/2.5.3/sysroots/cortexa5hf-neon-poky-linux-gnueabi/usr/src/kernel/include/linux uleds.c
尝试阅读以下内容以熟悉其他 GCC(编译器)选项:https://gcc.gnu.org/onlinedocs/gcc/Directory-Options.html#Directory-Options
这似乎是对 kbuild 文件的尝试。
您不应使用 default
规则自行手动编译文件。相反,您应该 运行 内核的 makefile,并让它根据 obj-m
和朋友编译驱动程序。
您的 makefile 如下所示:
ifneq ($(KERNELRELEASE),)
ccflags-y += -I some/other/dir
obj-m += uleds.o
else
# default to build against running kernel if KDIR not
# specified:
KDIR ?= /lib/modules/`uname -r`/build
default:
$(MAKE) -C $(KDIR) M=$$PWD
endif
如果您从驱动程序目录调用 make,它会依次从您的内核目录调用 make,它将了解内核的所有信息并能够正确构建您的模块。
请注意,默认情况下,内置内核的清理目标将删除所有生成的 *.[oas]
文件,因此不需要特殊的 clean
目标。此外,默认情况下,内核的 makefile 将包含它自己的 include
目录,因此您可能不需要为此做任何特殊的事情。如果您确实需要从其他地方包含,您可以将 -I
指令添加到 ccflags-y
,如示例所示。
我正在尝试编译 uleds.c 驱动程序,此驱动程序包含存在于此路径下的多个文件:
/opt/poky-atmel/2.5.3/sysroots/cortexa5hf-neon-poky-linux-gnueabi/usr/src/kernel/include/linux
我现在想修改我的 Makefile 并添加此路径,以便我可以正确编译 uleds.c
这是我的 Makefile :
#CC=arm-poky-linux-gnueabi-gcc -march=armv7-a -marm -mfpu=neon -mfloat-abi=hard -mcpu=cortex-a5 --sysroot=/opt/poky-atmel/2.5.3/sysroots/cortexa5hf-neon-poky-linux-gnueabi
#CC="gcc"
obj-m += uleds.o
KERNEL_SOURCE := /opt/poky-atmel/2.5.3/sysroots/cortexa5hf-neon-poky-linux-gnueabi/lib/modules/4.14.73-linux4sam-6.0-dirty
default:
${CC} ${KERNEL_SOURCE} uleds.c
clean:
${CC} $(INC) ${KERNEL_SOURCE} clean
有什么建议吗?谢谢
最简单的是:
${CC} -I/opt/poky-atmel/2.5.3/sysroots/cortexa5hf-neon-poky-linux-gnueabi/usr/src/kernel/include/linux uleds.c
尝试阅读以下内容以熟悉其他 GCC(编译器)选项:https://gcc.gnu.org/onlinedocs/gcc/Directory-Options.html#Directory-Options
这似乎是对 kbuild 文件的尝试。
您不应使用 default
规则自行手动编译文件。相反,您应该 运行 内核的 makefile,并让它根据 obj-m
和朋友编译驱动程序。
您的 makefile 如下所示:
ifneq ($(KERNELRELEASE),)
ccflags-y += -I some/other/dir
obj-m += uleds.o
else
# default to build against running kernel if KDIR not
# specified:
KDIR ?= /lib/modules/`uname -r`/build
default:
$(MAKE) -C $(KDIR) M=$$PWD
endif
如果您从驱动程序目录调用 make,它会依次从您的内核目录调用 make,它将了解内核的所有信息并能够正确构建您的模块。
请注意,默认情况下,内置内核的清理目标将删除所有生成的 *.[oas]
文件,因此不需要特殊的 clean
目标。此外,默认情况下,内核的 makefile 将包含它自己的 include
目录,因此您可能不需要为此做任何特殊的事情。如果您确实需要从其他地方包含,您可以将 -I
指令添加到 ccflags-y
,如示例所示。