2016-02-27 117 views
0

我有IDE和兩個生成版本的Makefile項目:調試和發佈。 IDE發送make命令:「make -f Makefile Debug」或「make -f Makefile Release」。 我無法找到如何通過參數「Debug」或「Release」來更改ccflags-y的方法。什麼是正確的方式?我簡單的Makefile看到的是這樣的:調試/發佈從IDE調用的Makefile

ccflags-y += -D__KERNEL__ -DMODULE -DDEFINE1 -DDEFINE2 

mkfile_dir := $(dir $(abspath $(lastword $(MAKEFILE_LIST)))) 

Debug: ccflags-y += -DDEBUG -g3 -O0 # NOT FUNCTIONAL ! 
Release: ccflags-y += -DNDEBUG -O2 # NOT FUNCTIONAL ! 
Debug: all 
Release: all 
cleanDebug: clean 
cleanRelease: clean 

obj-m := modulesrc.o 

all: 
    make -C /lib/modules/$(shell uname -r)/build M=$(mkfile_dir) modules 

clean: 
    make -C /lib/modules/$(shell uname -r)/build M=$(mkfile_dir) clean 

回答

0

首先,我試着寫IFEQ條件在此進行測試$(MAKECMDGOALS),但它不是功能性的,因爲這個Makefile構建模塊和子當調用其他的Makefile Makefiles是除Debug/Release之外的其他目標。我找到了其他解決方案,但我仍不確定它是否正確。我改變了IDE CMDLINE開始化妝: 「使-f生成文件mytarget =調試」 或 「使-f生成文件mytarget =釋放」 然後我添加到條件的Makefile:

ccflags-y += -D__KERNEL__ -DMODULE -DDEFINE1 -DDEFINE2 

mkfile_dir := $(dir $(abspath $(lastword $(MAKEFILE_LIST)))) 

ifeq ($(mytarget),Debug) 
ccflags-y += -DDEBUG -O0 
endif 

ifeq ($(mytarget),Release) 
ccflags-y += -DNDEBUG -O2 
endif 

cleanDebug: clean 
cleanRelease: clean 

obj-m := modulesrc.o 

all: 
    make -C /lib/modules/$(shell uname -r)/build M=$(mkfile_dir) modules 

clean: 
    make -C /lib/modules/$(shell uname -r)/build M=$(mkfile_dir) clean 
0

您還沒有我們顯示的其他makefile文件,但請試試:

all: 
    make -C /lib/modules/$(shell uname -r)/build M=$(mkfile_dir) modules ccflags-y=$(ccflagS-Y) 

clean: 
    make -C /lib/modules/$(shell uname -r)/build M=$(mkfile_dir) clean ccflags-y=$(ccflagS-Y) 
+0

其他makefile是內核源代碼的一部分。即使我已經解決了它,但我試過了,它不起作用。在源代碼編譯中,編譯器不知道需要的定義。 – StackPeter