【问题标题】:Makefile called from IDE for Debug/Release从 IDE 调用 Makefile 以进行调试/发布
【发布时间】: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

【问题讨论】:

    标签: c++ linux parameters makefile


    【解决方案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 是内核源代码的一部分。即使我已经解决了,我也试过了,它不起作用。在源代码编译编译器不知道所需的定义。
      猜你喜欢
      • 2010-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-10
      • 2012-07-14
      相关资源
      最近更新 更多