2009-10-29 18 views
6

Ho bisogno di trovare il testo 'ifeq ($ (Param1)' utilizzando grep. Provo ad assegnare il risultato della ricerca per rendere variabile.Il problema è che le virgolette singole non sfuggono al testo in fare in modo che quando provo:grep dall'interno di GNU make

GrepResult:= $(shell grep 'ifeq ($$(Param1)' TextFile) 

ottengo:

Makefile:214: *** unterminated call to function `shell': missing `)'. Stop. 

Il $ si può sfuggire con $$ ma come faccio a fuggire parentesi nel make Grazie

?.

NB: $ GrepResult viene utilizzato nella funzione $ (errore), non in un comando di regola.

+0

io sono in grado di ottenere che il comando help per funzionare. Hai trovato una soluzione? '$ (shell grep ...)'? basta usare ognuno di grep, awk, sort, pr come minuscolo? – tarabyte

risposta

1

Hai davvero bisogno di usare $ (shell)?

GrepResult:= `grep 'ifeq (\$$(Param1)' TextFile` 

all: 
    echo ${GrepResult} 

testato con GNU Make 3.81.

+0

scusate, non l'ho menzionato, ma uso il risultato di grep con $ (errore) e con le virgolette riporta semplicemente il contenuto della variabile senza eseguire il comando. – jackhab

6

Il trucco è quello di contrabbandare i caratteri speciali passati Crea e grep.

 
GrepResult := ${shell grep 'ifeq (\$$(Param1)' TextFile} 

Fai giri $$ in $, quindi grep gira in $ in $. Si noti inoltre che questa assegnazione utilizza parentesi graffe "{}", non parentesi "()", in modo da non essere confusa dai risultati della corrispondenza. (Ci può essere un modo più robusto per gestire la corda, ma non importa.)

Quando si utilizza il risultato, utilizzare le virgolette singole:

 
all: 
    @echo '$(GrepResult)' 

Anche questo è stato testato con gnumake 3.81.

EDIT: Questo funziona anche con $ (errore ...):

 
    $(error '$(GrepResult)') 
Problemi correlati