2011-05-17 27 views
21

Mam następujący kod w moim makefile:zmienna Drukowanie z poziomu Makefile

S_RES=$(shell cat output) 

echo -e "Serial result = \t" $(S_RES) 

Zasadniczo chcę, aby przechowywać dane wyjściowe polecenia powłoki cat output w zmiennej S_RES, a następnie powtórzyć tę zmienną na ekranie (z pewnym tekstem objaśniającym przed nim). Chcę też móc używać zmiennej później w moim programie. Myślałem, że postępowałem zgodnie z instrukcjami podanymi w różnych pytaniach dotyczących StackOverflow, ale to nie działa.

Odpowiedz

41

Jeśli prosty przestrzeń zamiast sekwencji ucieczki \t jest dozwolone, a twoja make jest GNU make 3,81 lub wyższym, $(info) jest dostępna.
Na przykład:

$(info Serial result = $(S_RES)) 

Jeśli twoi make wersja „S 3.80 lub niższy, $(warning) może sprostać celowi . Jednak warning również drukuje numer linii itp.

EDIT: Dla Twojej informacji, następujące wyjścia makefile abc na moim GNU make 3.81.

A := $(shell echo abc) 
$(info $(A)) 
+0

Niestety to nie działa. Otrzymuję wydruk "Serial result =", ale nie wartość S_RES. Zakładam, że ustawiam S_RES poprawnie na pierwszym miejscu - czy to prawda? – robintw

+0

Czy twój 'make'' GNU-make'? Jeśli tak, jaka jest wersja? Proszę zobaczyć edycję. –

+0

pojawia się następujący komunikat: A: = abc Producent: A: nie znaleziono polecenia make: *** [test] Błąd 127 A moja wersja makijażu jest GNU make 3.81 – robintw

5

tylko marginesie

ten ocenia się na czas użytkowania, to tyle razy, ile $ (A) jest stosowane

A = something 

ten ocenia się na parse czasie, zatem wartość jest raz ocenia

A := something