работает grep из GNU make - PullRequest
       15

работает grep из GNU make

6 голосов
/ 29 октября 2009

Мне нужно найти текст 'ifeq ($ (Param1)' ) с помощью grep. Я пытаюсь присвоить результат поиска переменной make. Проблема в том, что одинарные кавычки не экранируют текст в make когда я пытаюсь:

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

Я получаю:

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

$ можно экранировать с помощью $$, но как мне избежать скобок в make? Спасибо.

Примечание: $ GrepResult используется в функции $ (error), а не в команде правила.

Ответы [ 2 ]

6 голосов
/ 29 октября 2009

Хитрость заключается в том, чтобы переправлять специальные символы мимо Make и grep.

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

Make превращает $$ в $, затем grep превращает \ $ в $. Также обратите внимание, что в этом назначении используются фигурные скобки "{}", а не круглые скобки "()", чтобы не путать результаты сопоставления. (Может быть более надежный способ обработки строки, но не берите в голову.)

Когда вы используете результат, используйте одинарные кавычки:

all:
    @echo '$(GrepResult)'

Это тоже было протестировано с GNUMake 3.81.

EDIT: Это также работает с $ (ошибка ...):

    $(error '$(GrepResult)')
1 голос
/ 29 октября 2009

Вам действительно нужно использовать $ (shell)?

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

all:
  echo ${GrepResult}

Протестировано с GNU Make 3.81.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...