Как использовать запятые в строке, переданной функции вызова - PullRequest
0 голосов
/ 11 марта 2019

Фон

Я хочу иметь возможность указать параметры Makefile с помощью функции, чтобы моя цель помощи могла автоматически перечислять все определенные параметры.

Что я пробовал

Написание функции, которая хранит текст справки в переменной (и отслеживает список таких переменных), готовый для последующей распечатки.

Это прекрасно работает, за исключением случаев, когда я использую запятые в строках справки!

Я попытался отладить ошибку и сократил ее до следующего примера, который, по моему мнению, является основной причиной:

У меня есть следующий make-файл:

get_first_param = $(1)

.PHONY: help
help:
    @echo $(call get_first_param, "Hi; my name is Peter")

ЕслиЯ запускаю make help, это работает нормально и печатает сообщение.

Однако, если я изменяю ; на ,, я получаю ошибку:

/bin/sh: 1: Syntax error: Unterminated quoted string
Makefile:5: recipe for target 'help' failed
make: *** [help] Error 2

Я предполагаюэто вызвано тем, что функция вызова обрабатывает запятую как обозначение конца первого параметра, и поэтому возвращаемое значение равно "hi.

(я использую Gnu Make 4.1)

Вопрос

Есть ли способ использовать запятые в строке successfully?

Я пробовал различные способы экранирования кавычек и запятых, но, кажется, ничто не может это исправить.

Ответы [ 2 ]

2 голосов
/ 11 марта 2019

Единственный способ - скрыть его за переменной, например:

C := ,

get_first_param = $(1)

.PHONY: help
help:
        @echo $(call get_first_param, "Hi$C my name is Peter")
0 голосов
/ 11 марта 2019

Это работает, если вы делаете:

get_first_param = $(1)
comma =,

.PHONY: help
help:
    @echo $(call get_first_param, "Hi$(comma) my name is Peter")

, но я не знаю, является ли это лучшим способом

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