鉴于以下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
答案 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)<)