20

我正在工作中尝试更新的构建系统;目前,我正在尝试找到一种根据目标平台设置编译器和标志的好方法。

我想做的是

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

4 回答 4

33

怎么样:

CFLAGS_Linux_x86_release        = -O3
CFLAGS_Linux_x86_debug          = -O0 -g


CFLAGS  = ${CFLAGS_${PLATFORM}_${BUILD}}
于 2008-10-14T07:22:11.460 回答
7

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

话虽如此,您可以查看条件条件函数的语法。例如,您可以尝试以下操作:

ifeq ($(PLATFORM)_$(BUILD_TYPE),Linux_x86_release)
    CFLAGS = -O3
endif
ifeq ($(PLATFORM)_$(BUILD_TYPE),Linux_x86_debug)
    CFLAGS = -O0 -g
endif
于 2008-10-14T07:09:42.500 回答
5

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

于 2008-10-14T18:35:25.967 回答
-4

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

于 2008-10-14T13:55:36.033 回答