我正在尝试能够在命令行执行"make debug“,它将使用-DDEBUG_OUTPUT定义构建我的驱动程序模块,这将导致编译某些部分的代码。
在2.4内核makefile中,这非常简单。我刚刚创建了一个debug: target,并在该目标的cc编译命令参数中包含了"-DDEBUG_OUTPUT“。很简单。
不幸的是(对我来说),2.6完全改变了模块的编译方式,而且我似乎只能找到一些微不足道的"all“和"clean”示例,它们没有显示在编译时添加自定义定义。
我试过这个:
debug:
make -C $(KERNEL_DIR) SUBDIRS='pwd' -DDEBUG_OUTPUT modules收到了make的投诉。
我也尝试过:
.PHONY:调试
debug:
make -C $(KERNEL_DIR) SUBDIRS='pwd' EXTRA_CFLAGS="$(EXTRA_CFLAGS) -DDEBUG_OUTPUT" modules但它并没有看到EXTRA_CFLAGS包含的内容。我可以从命令行输出中看到,它确实正确地将-D附加到现有的EXTRA_CFLAGS上,其中包括用于包含目录的-I。但是,驱动程序文件现在不能编译,因为它找不到包含的dir...so,因为它看不到EXTRA_CFLAGS包含的内容。
发布于 2011-10-10 23:14:27
"-D“选项并不意味着要传递给make:它是一个C预处理程序(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"EDIT#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)"https://stackoverflow.com/questions/7714714
复制相似问题