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

Posted

技术标签:

【中文标题】从 IDE 调用 Makefile 以进行调试/发布【英文标题】:Makefile called from IDE for Debug/Release 【发布时间】:2016-02-27 09:21:04 【问题描述】:

我在 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

【问题讨论】:

【参考方案1】:

首先我尝试编写测试 $(MAKECMDGOALS) 的 ifeq 条件,但它不起作用,因为此 Makefile 在构建模块时调用其他 Makefile 并且在子 Makefile 中是除 Debug/Release 之外的其他目标。我找到了其他解决方案,但我仍然不确定它是否正确。我更改了 IDE 命令行开始 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

【讨论】:

【参考方案2】:

您还没有向我们展示其他 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 是内核源代码的一部分。即使我已经解决了,我也试过了,它不起作用。在源代码编译编译器不知道所需的定义。

以上是关于从 IDE 调用 Makefile 以进行调试/发布的主要内容,如果未能解决你的问题,请参考以下文章

如何配置我的 makefile 以进行调试和发布版本?

使用 XDebug 设置 Komodo IDE 以进行逐步 PHP 调试

Linux下C/C++程序开发管理(makefile)

在 C 中使用 makefile 标志进行调试

在 Visual Studio Code 中使用 Makefile 调试现有项目

如何从 Eclipse RCP 到“主机”Eclipse IDE 进行通信