首页 文章

用于调试/测试/发布的Makefile树具有多个目标

提问于
浏览
0

结构体:

makefile
system/
-> makefile
-> kernel/
-> -> makefile
-> -> src/
-> FutureModules
-> -> makefile
-> -> src/
userland/
-> makefile
-> FutureModules
-> -> makefile
-> -> src/

目前我用 make system 构建它 .

  • 我想将它拆分为Debug / Test / Release版本,以便我可以使用多个目标(例如 make debug system userland 或类似的东西)执行类似 make debug systemmake -d system 的操作 .

  • 我想更改目标,这样我就可以直接构建目标而不是构建 system 并手动在 system/makefile 中添加所需的目标 .

现在为了实现这个目标:

  • 常量是否在makefile之间共享?所以,当我执行 make system 并在root makefile中定义 CFLAGS += -g -Og 时, system/makefile 是否从根makefile获取常量?

  • 常量会在make会话中保持不变吗?所以当我做 make debug system userland 并且有类似 debug: CFLAGS += -g -Og 之类的东西时,系统和用户区是否会得到 -g -Og 标志?


编辑:我设法通过使用 $(shell find -maxdepth 1 -type d) 和其他一些命令实现2.

1 回答

  • 0

    解决了它:

    #Build mode. m=d => Debug | m=t => Test | m=r => release | default => release
    ifeq ($(m), d)
        NASBUILD = $(NASDEBUG)
        GASBUILD = $(GASDEBUG)
        CPPBUILD = $(CPPDEBUG)
        CBUILD = $(CDEBUG)
    else ifeq ($(m), t)
        NASBUILD = $(NASTEST)
        GASBUILD = $(GASTEST)
        CPPBUILD = $(CPPTEST)
        CBUILD = $(CTEST)
    else ifeq ($(m), r)
        NASBUILD = $(NASRELEASE)
        GASBUILD = $(GASRELEASE)
        CPPBUILD = $(CPPRELEASE)
        CBUILD = $(CRELEASE)
    else
        NASBUILD = $(NASRELEASE)
        GASBUILD = $(GASRELEASE)
        CPPBUILD = $(CPPRELEASE)
        CBUILD = $(CRELEASE)
    endif
    
    export NASBUILD
    export GASBUILD
    export CPPBUILD
    export CBUILD
    

    其中xxxBUILD等添加到相应的xxxFLAGS .

相关问题