我试图能够在命令行执行“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)"