如何将字符串与makefile中的多个文字进行匹配?

时间:2017-08-08 01:36:06

标签: makefile string-comparison

鉴于以下ifeq语句,如何将其压缩,以便可以在一个ifeq块中处理字符串检查?

OS:=$(shell uname -s)

ifeq ($(OS), Linux)
    foo
endif
ifeq ($(OS), Darwin)
    bar
endif
ifeq ($(OS), FreeBSD)
    bar
endif
ifeq ($(OS), NetBSD)
    bar
endif

我已查看similar Q&A,但不确定它将如何完全适用于此问题。

这样的事情:

ifeq ($(OS), Linux)
    foo
endif
ifeq ($(OS) in (Darwin, FreeBSD, NetBSD))  # <- something like this
    bar
endif

2 个答案:

答案 0 :(得分:4)

您可以使用filter功能:

ifeq ($(OS), Linux)
    foo
endif
ifneq (,$(filter $(OS),Darwin FreeBSD NetBSD))
    bar
endif

答案 1 :(得分:0)

您也可以使用the GNUmake table toolkit,尽管它的文档仍处于测试阶段。您的代码将如下所示:

include gmtt.mk

OS := $(shell uname -s)

# define a gmtt table with 2 columns
define os-table :=
2
Linux      foo
Windows    bar
Darwin     baz
FreeBSD    bof
NetBSD     baf
CYGWIN     foobar
endef


my-var := $(call select,$(os-table),2,$$(call str-match,$$(OS),$$1%))

$(info I'm on $(OS) and I selected >$(my-var)<)