2016-02-27 61 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