2017-08-08 33 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)<)