代码之家  ›  专栏  ›  技术社区  ›  Christoffer

在makefile中进行“切换”的好方法

  •  12
  • Christoffer  · 技术社区  · 16 年前

    我正在试验一个正在运行的更新的构建系统;目前,我正在尝试找到一种根据目标平台设置编译器标记的好方法。

    我想做的是

    switch $(PLATFORM)_$(BUILD_TYPE)
      case "Linux_x86_release"
         CFLAGS = -O3
      case "Linux_x86_debug"
         CFLAGS = -O0 -g
      case "ARM_release"
         CC = armcc
         AR = armlink
         CFLAGS = -O2 -fx
         ...
    

    GNU Make不支持。现在,我的第一个想法是

    -include $(PLATFORM)_$(BUILD_TYPE)
    

    这是一个相当不错的解决方案,但是,很难了解文件之间的差异,更不用说我期待编写和维护一个良好的60-80个文件,每个文件都包含一组变量定义。

    有人知道更好的方法来完成这个吗?即根据另一个变量设置一组标志和其他选项?

    4 回复  |  直到 16 年前
        1
  •  1
  •   bortzmeyer    16 年前

    切换到一个为您做这件事的系统(automake/autoconf)可能更简单…

        2
  •  20
  •   Loki Astari    16 年前

    怎么样:

    CFLAGS_Linux_x86_release        = -O3
    CFLAGS_Linux_x86_debug          = -O0 -g
    
    
    CFLAGS  = ${CFLAGS_${PLATFORM}_${BUILD}}
    
        3
  •  6
  •   Bruno De Fraine    16 年前

    配置这些参数将是 configure 脚本。

    也就是说,您可以查看 conditionals conditional functions . 例如,您可以尝试以下操作:

    ifeq ($(PLATFORM)_$(BUILD_TYPE),Linux_x86_release)
        CFLAGS = -O3
    endif
    ifeq ($(PLATFORM)_$(BUILD_TYPE),Linux_x86_debug)
        CFLAGS = -O0 -g
    endif
    
        4
  •  3
  •   JesperE    16 年前

    这个 Makefile 被使用 git 是makefile的一个很好的例子,它在makefile本身中执行非常重要的配置任务(例如打开主机类型)。它实际上可读性很好,使用起来相当简单。