我在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
答案 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)