2016-08-06 77 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包含空格字符。「

相關問題