我正在尝试能够在命令行执行“make debug”,它将使用-DDEBUG_OUTPUT定义构建我的驱动程序模块,这将导致编译某些代码段。
在2.4内核makefile中,这很容易。我只是创建一个debug:target并在该目标的cc编译命令参数中包含“-DDEBUG_OUTPUT”。容易。
不幸的是(对我来说),2.6完全改变了模块的编译方式,我只能找到简单的“全部”和“干净”的例子,这些例子没有显示在编译时添加自定义定义。
我试过了:
debug:
make -C $(KERNEL_DIR) SUBDIRS='pwd' -DDEBUG_OUTPUT modules
并从make收到投诉。
我也试过了:
.PHONY:debug
debug:
make -C $(KERNEL_DIR) SUBDIRS='pwd' EXTRA_CFLAGS="$(EXTRA_CFLAGS) -DDEBUG_OUTPUT" modules
但它没有看到EXTRA_CFLAGS包含的内容。我可以从命令行输出中看到它确实将-D正确地附加到现有的EXTRA_CFLAGS上,其中包括-I for includes dir。但是,驱动程序文件现在不会编译,因为它找不到包含目录...所以不知何故它没有看到EXTRA_CFLAGS包含的内容。
答案 0 :(得分:5)
“-D”选项并不意味着传递给make:它是一个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)"