2017-08-08 13 views
1

ifeqステートメントが与えられた場合、これはどのように圧縮されて、文字列チェックが1つの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を調べましたが、この質問にどのように正確に当てはまるかはわかりません。


このような何か:それドキュメントはまだ非常にベータ版ですが、あなたはまた、the GNUmake table toolkitを使用することができ

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

答えて

4

あなたはこのためにfilter機能を使用することができます。あなたのコードは次のようになります:

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

'ifneq'はひどく読みますが、これはそのやり方です。 – ideasman42

0

ifeq ($(OS), Linux) 
    foo 
endif 
ifeq ($(OS) in (Darwin, FreeBSD, NetBSD)) # <- something like this 
    bar 
endif 
関連する問題