2011-10-10 37 views
4

我試圖能夠在命令行執行「make debug」,它將使用-DDEBUG_OUTPUT定義構建我的驅動程序模塊,這會導致代碼的某些部分被編譯進去。在Linux 2.6驅動程序模塊makefile中創建一個調試目標

在2.4內核makefiles中,這很簡單。我只是創建一個debug:target,並在該目標的cc編譯命令參數中包含「-DDEBUG_OUTPUT」。簡單。

不幸的是(對我來說),2.6徹底改變了編譯模塊的方式,而且我似乎只能找到不重要的「全部」和「乾淨」的例子,它們在編譯時並未顯示添加自定義定義。

我嘗試這樣做:

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

,並得到了進行投訴。

我也試過:

.PHONY:調試

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包含。

回答

5

「-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)" 
+0

好吧,我可以做到這一點,但我如何有條件地將EXTRA_CFLAGS設置爲該值,基於如果我想「make debug」而不是「make」?我試着將EXTRA_CFLAGS賦值直接放在調試目標下,但是我得到了一個在EXTRA_CFLAGS上找不到的命令。 – Rob

+0

我用調試目標修改了答案。 – Mircea

+0

謝謝你的幫助Mircea。我把那個字符串放在那裏,但是驅動程序文件現在不會編譯,因爲它宣稱缺少位於EXTRA_CFLAGS中由-I指定的包含目錄中的.h文件。換句話說,將EXTRA_CFLAGS = make命令的一部分導致make無法看到EXTRA_CFLAGS的-I 部分。我將它添加到我原來的帖子中。 – Rob