在Linux 2.6驱动程序模块makefile中创build一个debugging目标

我试图能够在命令行执行“make debug”,它将使用-DDEBUG_OUTPUT定义构build我的驱动程序模块,这将导致编译某些代码段。

在2.4内核makefiles中,这很容易。 我只是创build一个debug:target,并在该目标的cc编译命令参数中包含“-DDEBUG_OUTPUT”。 简单。

不幸的是(对我来说),2.6完全改变了模块的编译方式,而且我似乎只能find一些简单的“全部”和“干净”的例子,它们并没有在编译时join自定义的定义。

我试过这个:

debug: make -C $(KERNEL_DIR) SUBDIRS='pwd' -DDEBUG_OUTPUT modules 

并得到了一个投诉。

我也试过:

.PHONY:debugging

 debug: make -C $(KERNEL_DIR) SUBDIRS='pwd' EXTRA_CFLAGS="$(EXTRA_CFLAGS) -DDEBUG_OUTPUT" modules 

但它没有看到什么EXTRA_CFLAGS包含。 我可以从命令行输出中看到它正确地将-D添加到现有的EXTRA_CFLAGS上,其中包括用于包含目录的-I。 但是,驱动程序文件现在不能编译,因为它找不到包含目录…所以不知何故,它没有看到什么EXTRA_CFLAGS包含。

“-D”选项并不意味着要传递给它:它是一个C preprocesseor(cpp)选项。

要为您的构建定义DEBUG_OUTPUT,您必须将以下行添加到您的Kbuild文件中:

 EXTRA_CFLAGS = -DDEBUG_OUTPUT 

之后,您可以像往常一样打电话:

 make -C $(KERNEL_DIR) M=`pwd` 

编辑:如果你不想编辑Kbuild文件,你可以有一个像这样的调试目标:

 INCLUDES="-Imy_include_dir1 -Imy_include_dir2" .PHONY: debug debug: $(MAKE) -C $(KDIR) M=`pwd` EXTRA_CFLAGS="$(INCLUDES) -DDEBUG_OUTPUT" 

编辑#2:

 MY_CFLAGS=-DFOO -DBAR -Imydir1 all: $(MAKE) -C $(KDIR) M=`pwd` EXTRA_CFLAGS="$(MY_CFLAGS)" debug: MY_CFLAGS+=-DDEBUG_OUTPUT debug: $(MAKE) -C $(KDIR) M=`pwd` EXTRA_CFLAGS="$(MY_CFLAGS)"