2016-08-06 29 views
7

Chcę ustawić zmienną, jeśli jest pusta. Próbowałem w ten sposób:Plik Makefile, jeśli zmienna jest pusta

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

Pierwszy $(something) może powrócić pusty ciąg, jednak cesja warunkowa = działa tylko wtedy, gdy poprzedni zmienna nie jest ustawiona, jeśli nie jest pusta?.

Dowolne eleganckie rozwiązanie do ustawienia zmiennej, jeśli jest puste?


EDIT Znalazłem rozwiązanie:

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

ale myślę, że będzie jeszcze jeden elegancki.

+0

Wiele programów 'make' ma warunki, a także funkcje do testowania zmiennych. Dla GNU Make [przeczytaj dokumentację] (https://www.gnu.org/software/make/manual/make.html). –

+0

W zależności od tego, czym jest "coś", możesz użyć 'ifeq (, $ (TEST)) lub jeśli' coś' jest poleceniem powłoki prawdopodobnie 'coś || coś jeszcze ". – tripleee

+1

To może być [problem XY] (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem), proszę nie używać spreparowanych przykładów. – user657267

Odpowiedz

26

Dowolne eleganckie rozwiązanie do ustawienia zmiennej, jeśli jest puste?

GNU marka nie jest znana z eleganckich rozwiązań. Chyba że znajdziesz zapadnie i pola minowe, żeby były eleganckie. Znam tylko z dwóch sposobów, aby osiągnąć to, co chcesz:

  1. Standardowa ifeq/endif rozwiązanie:

    ifeq ($(TEST),) 
    TEST := $(something else) 
    endif 
    
  2. Użyj $(if) funkcję:

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

    Można spróbować do pakowania tej konstrukcji do funkcji, ale jest to niewskazane. Funkcja miałaby ukrytą pułapkę polegającą na okazjonalnym złamaniu $(something else), jeśli zawiera ona , (dla której istnieją tylko krnąbrne obejścia). (Wbudowane funkcje, takie jak $(if) są odporni na , błędu.)

Test Elegance należy do Ciebie.

0

Od GNU make, rozdział 7.2, Składnia warunkowe.

„Często chcesz sprawdzić, czy zmienna ma niepusty wartość Gdy wyniki wartość od złożonych ekspansji zmiennych i funkcji, rozszerzeń Państwo rozważy pusta może faktycznie zawierać białe znaki, a zatem nie są postrzegane jako pusty jednak można użyć funkcji paska, aby uniknąć interpretacji spacje jako niepusty wartości. na przykład:.

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

oceni tekstu czy -Nie, nawet jeśli Expansio n $ (foo) zawiera białe znaki. "

Powiązane problemy