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

时间:2008-10-14 06:52:24

标签: makefile switch-statement

我正在尝试使用更新的构建系统;目前,我正在努力寻找一种设置编译器和放大器的好方法。标志取决于目标平台。

我想做的是像

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 个答案:

答案 0 :(得分:21)

怎么样:

CFLAGS_Linux_x86_release        = -O3
CFLAGS_Linux_x86_debug          = -O0 -g


CFLAGS  = ${CFLAGS_${PLATFORM}_${BUILD}}

答案 1 :(得分:6)

配置此类参数将是configure脚本的任务。

话虽如此,您可以查看conditionalsconditional functions的语法。例如,您可以尝试以下操作:

ifeq ($(PLATFORM)_$(BUILD_TYPE),Linux_x86_release)
    CFLAGS = -O3
endif
ifeq ($(PLATFORM)_$(BUILD_TYPE),Linux_x86_debug)
    CFLAGS = -O0 -g
endif

答案 2 :(得分:3)

Makefile使用的git是Makefile的一个很好的例子,它在Makefile本身中执行非平凡的配置任务(例如切换主机类型)。它实际上非常易读且使用起来相当简单。

答案 3 :(得分:2)

切换到为您执行此操作的系统(automake / autoconf)可能更简单......