Ответ 1
Вы никогда не должны цитировать что-либо из-за make. Make не понимает и не анализирует символы с одной или двумя кавычками. Каждый цитирующий символ, который вы пишете в make файле, будет храниться как литеральная цитата и передается как-есть в команды, вызывающие вызовы.
Итак, если оболочка ожидает и может интерпретировать строку с кавычками, вы должны использовать кавычки. Если оболочка не ожидает или неправильно интерпретирует строку с кавычками, вы не должны использовать кавычки.
В ваших примерах, являются ли кавычки приемлемыми или нет, зависит от использования этих переменных. Как и выше, make не будет делать ничего особенного с кавычками, а это означает, что vard
(например) содержит литеральную строку "/home/me/source"
(включая кавычки).
Если вы используете это значение таким образом, чтобы оболочка обрабатывала кавычки для вас, то это прекрасно:
all: ; echo $(vard)
напечатает /home/me/source
(без кавычек), потому что оболочка интерпретирует их. Но если вы используете переменную в контексте make, например, в качестве цели или предпосылки:
all: $(vard)
$(vard): ; echo [email protected]
то это неверно, потому что целью и предпосылкой являются литеральные строки "/home/me/source"
(включая кавычки).
В целом лучше не использовать кавычки вокруг имен файлов в переменных, а вместо этого добавлять кавычки в рецепт вокруг переменной make. Конечно, если переменная содержит целую оболочку script, а не только имя файла, то вы должны добавить соответствующее цитирование в script.