gpt4 book ai didi

c++ - 从 IDE 调用 Makefile 进行调试/发布

转载 作者:太空宇宙 更新时间:2023-11-04 12:56:10 25 4
gpt4 key购买 nike

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

最佳答案

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

关于c++ - 从 IDE 调用 Makefile 进行调试/发布,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35667972/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com