我試圖能夠在命令行執行「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包含。
好吧,我可以做到這一點,但我如何有條件地將EXTRA_CFLAGS設置爲該值,基於如果我想「make debug」而不是「make」?我試着將EXTRA_CFLAGS賦值直接放在調試目標下,但是我得到了一個在EXTRA_CFLAGS上找不到的命令。 – Rob
我用調試目標修改了答案。 – Mircea
謝謝你的幫助Mircea。我把那個字符串放在那裏,但是驅動程序文件現在不會編譯,因爲它宣稱缺少位於EXTRA_CFLAGS中由-I指定的包含目錄中的.h文件。換句話說,將EXTRA_CFLAGS = make命令的一部分導致make無法看到EXTRA_CFLAGS的-I部分。我將它添加到我原來的帖子中。 –
Rob