在我的Makefile中,我想检查以下复杂情况:
ifdef VAR1 || VAR2 || VAR3
action
endif
Run Code Online (Sandbox Code Playgroud)
但文档说不支持这样的语法.因此,我想到的唯一简单的解决方法是使用串联:
ifneq ($(VAR1)$(VAR2)$(VAR3),)
action
endif
Run Code Online (Sandbox Code Playgroud)
还有其他更正确的解决方案吗?
对于以下情况:
ifdef VAR1 && VAR2 && VAR3
action
endif
Run Code Online (Sandbox Code Playgroud)
一个人需要写
ifdef VAR1
ifdef VAR2
ifdef VAR3
action
endif
endif
endif
Run Code Online (Sandbox Code Playgroud)
这也很难看.还有更优雅的选择吗?
Ise*_*ria 32
如果你make
是GNU-make并且所有定义的变量都包含非空格字符,
ifdef VAR1 && VAR2 && VAR3
Run Code Online (Sandbox Code Playgroud)
可写成
ifneq ($(and $(VAR1),$(VAR2),$(VAR3)),)
Run Code Online (Sandbox Code Playgroud)
在相关的说明中,可能的make
功能需要3.81或更高版本.
如果某些已定义的变量可能是空字符串,如果我们准备以下函数:
ifndef_any_of = $(filter undefined,$(foreach v,$(1),$(origin $(v))))
ifdef_any_of = $(filter-out undefined,$(foreach v,$(1),$(origin $(v))))
Run Code Online (Sandbox Code Playgroud)
那么以下条件:
ifdef VAR1 || VAR2
ifdef VAR1 && VAR2
Run Code Online (Sandbox Code Playgroud)
可分别写为:
ifneq ($(call ifdef_any_of,VAR1 VAR2),)
ifeq ($(call ifndef_any_of,VAR1 VAR2),)
Run Code Online (Sandbox Code Playgroud)