#makefile
#makefile
Вопрос:
Предыстория
Я хочу иметь возможность указывать параметры Makefile с помощью функции, чтобы моя цель справки могла автоматически перечислять все определенные параметры.
Что я пробовал
Написание функции, которая сохраняет текст справки в переменной (и отслеживает список таких переменных), готовой к распечатке позже.
Это работает нормально, за исключением случаев, когда я использую запятые в своих строках справки!
Я попытался отладить сбой и сократил его до следующего примера, который, как я думаю, является основной причиной:
У меня есть следующий makefile:
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)
Вопрос
Есть ли способ успешно использовать запятые в строке?
Я пробовал различные способы экранирования кавычек и запятых, но, похоже, ничто не помогает это исправить.
Ответ №1:
Единственный способ — скрыть это за переменной, вот так:
C := ,
get_first_param = $(1)
.PHONY: help
help:
@echo $(call get_first_param, "Hi$C my name is Peter")
Ответ №2:
Это работает, если вы делаете:
get_first_param = $(1)
comma =,
.PHONY: help
help:
@echo $(call get_first_param, "Hi$(comma) my name is Peter")
но я не знаю, лучший ли это способ