2016-08-06 80 views
7

我想设置一个变量,如果它是空的。我试着这样说:如果变量为空,则设置Makefile

.... 
TEST := $(something) 
... 
TEST ?= $(something else) 

第一$(something)可能会返回一个空字符串,但如果前面的变量没有设置,如果没有空有条件分配=仅适用?

任何优雅的解决方案来设置变量是否为空?


编辑 我发现这个解决方案:

.... 
TEST := $(something) 
... 
TEST += $(something else) 
TEST := $(word 1, $(TEST)) 

但我认为会有一个更优雅。

+0

许多'make'程序都有条件,并且还有函数来测试变量。对于GNU Make [请阅读文档](https://www.gnu.org/software/make/manual/make.html)。 –

+0

根据'something'是什么,你可以使用'ifeq(,$(TEST))'或者'something'是一个shell命令或者'something ||'别的东西'。 – tripleee

+1

这可能是[XY问题](http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem),请不要使用人为的例子。 – user657267

回答

26

任何优雅的解决方案来设置变量是否为空?

GNU make几乎不为优雅的解决方案所知。除非你发现陷门和雷区是优雅的。我知道只有两种方式来完成你想要的东西:

  1. 标准ifeq/endif解决方案:

    ifeq ($(TEST),) 
    TEST := $(something else) 
    endif 
    
  2. 使用$(if)功能:

    TEST := $(if $(TEST),$(TEST),$(something else)) 
    

    一个可以尝试把这个构造打包成一个函数,但这是不可取的。如果函数中包含,(其中仅有任何解决方法),该函数将偶尔会破坏$(something else)的隐藏陷阱。 (如$(if)内置的功能是免疫的,错误。)

优雅测试是由你。

0

GNU make,章7.2,条件的语法:

“通常你想测试一个变量具有非空值当从变量和函数复杂的扩展值结果,扩充你会考虑空实际上可能包含的空白字符,因此不被视为空然而,可以使用条函数以避免解释的空白作为一个非空值例如:。

ifeq ($(strip $(foo)),) 
text-if-empty 
endif 

将评估文本如果 - 即使展开也是空的$(foo)中的n包含空格字符。“

相关问题