C++ 从IDE调用Makefile进行调试/发布
我有IDE下的Makefile项目和两个构建版本:Debug和Release。IDE发送make命令:“make-fmakefiledebug”或“make-fmakefilerelease”。 我找不到通过参数“Debug”或“Release”更改ccflags-y的方法。什么是正确的方法?我的简化Makefile如下所示:C++ 从IDE调用Makefile进行调试/发布,c++,linux,parameters,makefile,C++,Linux,Parameters,Makefile,我有IDE下的Makefile项目和两个构建版本:Debug和Release。IDE发送make命令:“make-fmakefiledebug”或“make-fmakefilerelease”。 我找不到通过参数“Debug”或“Release”更改ccflags-y的方法。什么是正确的方法?我的简化Makefile如下所示: ccflags-y += -D__KERNEL__ -DMODULE -DDEFINE1 -DDEFINE2 mkfile_dir := $(dir $(abspath
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
首先,我尝试编写测试$(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
您尚未向我们显示其他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)
其他makefile是内核源代码的一部分。即使我已经解决了,我也试过了,它不起作用。在源代码编译中,编译器不知道必需的定义。