从IDE调用Makefile进行调试/发布

时间:2016-02-27 09:21:05

标签: c++ linux parameters makefile

我在IDE下有Makefile项目和两个构建版本:Debug和Release。 IDE发送make命令:“make -f Makefile Debug”或“make -f Makefile Release”。 我找不到如何通过参数“Debug”或“Release”更改ccflags-y的方法。什么是正确的方法?我的简化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

2 个答案:

答案 0 :(得分:0)

首先我尝试编写测试$(MAKECMDGOALS)的ifeq条件,但它不起作用,因为这个Makefile在构建模块时会调用其他Makefile,而在子Makefile中则调用其他目标而不是Debug / Release。我找到了其他解决方案,但我仍然不确定它是否正确。我改变IDE cmdline开始make:“make -f Makefile mytarget = Debug”或“make -f Makefile mytarget = Release”然后我在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

答案 1 :(得分: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)