Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/156.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 从IDE调用Makefile进行调试/发布_C++_Linux_Parameters_Makefile - Fatal编程技术网

C++ 从IDE调用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

我有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 $(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是内核源代码的一部分。即使我已经解决了,我也试过了,它不起作用。在源代码编译中,编译器不知道必需的定义。