我是新手,使用makefile编译内核模块以包含树源文件。我已经阅读了一些教程,但我仍然缺乏。在没有太详细的情况下,我创建了一个场景来描述问题并生成makefile。
dir1/main.c
dir2/subdir2/file.c
dir2/subdir2/include/file.h
以下是生成的makefile
obj-m:=main.o
main-y := ../dir2/include/file.o
KDIR := /home/userid/rowboat-android/kernel/
PWD := $(shell pwd)
default:
$(MAKE) ARCH=arm CROSS_COMPILE=/home/userid/rowboat-android/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/arm-eabi- -C $(KDIR) SUBDIRS=$(PWD) modules
clean
$(MAKE) -C $(KDIR) SUBDIRS=$(PWD) clean
根据描述的场景,这个Makefile是否正确?
参考资料讨论ccflags-y和EXTRA_CFLAGS。有人可以解释一下这些开关的用途吗?
我的主要参考资料来源是
感谢您提前的时间
答案 0 :(得分:1)
ccflags-y指定使用$(CC)进行编译的选项。
Example: # drivers/acpi/Makefile ccflags-y := -Os ccflags-$(_ACPI_DEBUG) += -DACPI_DEBUG_OUTPUT
ccflags-obj会将指定的任何标志传递给$(CC) 当make build obj.o时如果你使用ccflags-y,那么这将作为一种通配符,并将该标志传递给makefile正在构建的所有对象。通常这与out of tree模块无关,但如果Makefile调用其他Makefile,则这些标志的效果是递归的。
相同的文档说EXTRA_CFLAGS是做同样事情的旧方法,你不应该使用它。