2016-08-06 23 views
7

Ich möchte eine Variable setzen, wenn sie leer ist. Ich habe versucht, auf diese Weise:Makefile gesetzt, wenn die Variable leer ist

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

Die erste $(something) kann eine leere Zeichenfolge zurückgeben, aber die bedingte Zuweisung = funktioniert nur, wenn die vorherige Variable nicht gesetzt ist, nicht, wenn leer?.

Jede elegante Lösung, um die Variable zu setzen, wenn sie leer ist?


EDIT fand ich diese Lösung:

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

aber ich denke, dass es eine elegantere sein wird.

+0

Viele 'make'-Programme haben Bedingungen und funktionieren auch zum Testen von Variablen. Für GNU Make [bitte lesen Sie die Dokumentation] (https://www.gnu.org/software/make/manual/make.html). –

+0

Je nachdem, was "etwas" ist, können Sie 'ifeq (, $ (TEST))' oder wenn 'etwas' ein Shell-Befehl ist, vielleicht' etwas || etwas anderes. – tripleee

+1

Dies kann ein [XY-Problem] sein (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem), bitte verwenden Sie keine erfundenen Beispiele. – user657267

Antwort

26

Jede elegante Lösung, um die Variable zu setzen, wenn sie leer ist?

GNU make ist kaum für elegante Lösungen bekannt. Es sei denn, Sie finden Falltüren und Minenfelder elegant. Ich kenne nur die beiden Möglichkeiten zu erreichen, was Sie wollen:

  1. Die Standard ifeq/endif Lösung:

    ifeq ($(TEST),) 
    TEST := $(something else) 
    endif 
    
  2. Verwenden Sie die $(if) Funktion:

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

    Man kann versuchen, um dieses Konstrukt in eine Funktion zu verpacken, aber das ist nicht ratsam. Die Funktion hätte den versteckten Nachteil, dass sie gelegentlich die $(something else) bricht, wenn sie die , enthält (für die es nur unberechenbare Problemumgehungen gibt). (Die integrierten Funktionen wie $(if) sind immun gegen die , Fehler.)

Elegance-Test ist bei Ihnen.

0

Von GNU make, Kapitel 7.2, Syntax von Conditionals.

„Oft Sie testen möchten, ob eine Variable einen nicht leeren Wert hat, wenn der Wert ergibt sich aus komplexen Erweiterungen von Variablen und Funktionen, Erweiterungen würden Sie als leer tatsächlich Leerzeichen enthalten und sind daher nicht so leer gesehen jedoch Sie den Streifen Funktion Leerzeichen als nicht-leeren Wert zum Beispiel Interpretation zu vermeiden, verwenden können:..

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

text wenn auswertet -leere selbst wenn die expansio n von $ (foo) enthält Leerzeichen. "

Verwandte Themen