Makefile OR条件

时间:2015-09-01 12:34:01

标签: linux makefile

我希望有多个if条件并希望合并。

ifeq ($(TAG1), on)
LD_FLAGS += -ltestlibrary
endif
ifeq ($(TAG2), on)
LD_FLAGS += -ltestlibrary
endif

我想做一些事情:

ifeq ($(TAG1) || $(TAG2), on)
LD_FLAGS += -ltestlibrary
endif

我该怎么办? SO Makefile ifeq logical orHow to Use of Multiple condition in 'ifeq' statement中的答案提供了另外的做法。

4 个答案:

答案 0 :(得分:1)

你不能使用逻辑OR运算符simply isnt one,因此必须使用另一种方法 - 就像你已经找到的帖子中建议的那样。我喜欢这样做的方式是使用过滤器,如您提供的first link中所述。

在你的情况下,它看起来像这样

ifneq (,$(filter on,$(TAG1)$(TAG2)))
LD_FLAGS += -ltestlibrary
endif    

这会连接两个标记,将它们过滤为“on”,并将它们与空字符串进行比较,因此如果任一标记处于启用状态,则比较将为false,并且LD_FLAGS += -ltestlibrary代码将运行。

答案 1 :(得分:1)

可以在MakeFile中将过滤器用于OR运算符。 对于您的情况,情况将是: ifneq ($(filter on,$(TAG1) $(TAG2)),) LD_FLAGS += -ltestlibrary endif Please refer this link for GNU make functions for transforming text

答案 2 :(得分:0)

查看我的答案,here

如果要检查x = 4或x = 6

ifeq ($(x),$(filter $(x),4 6))   
   x is either 4 or 6. do whatever you like with it
else  
   x is neither 4 nor 6  
endif

答案 3 :(得分:0)

请注意,ifeq ($(x),$(filter $(x),4 6)) 将捕获根本没有定义 x 的情况。

如果你想抓住 x==4 || x==6 这会做的伎俩:

ifneq ($(filter $(GCC_MINOR),4 6),)
   # do stuff
endif