2017-08-08 82 views
1

考虑下面的语句ifeq,怎么会变成这样被冷凝,串支票可以在一个ifeq块来处理?如何来匹配在makefile多个文字字符串?

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 

回答

4

可以使用filter功能如下:

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

'ifneq'阅读不好,但看起来这是它完成的方式。 – ideasman42

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)<)