Использовать подстановка строк :
VERSION := 1.1.1
PACKAGE_NAME := Foo Bar
DOWNLOAD_URL := https://go.get/some/thing.tar.gz
ANNOUNCE_BODY := Version $(VERSION) of $(PACKAGE_NAME) has been released. \
| \
| It can be downloaded from $(DOWNLOAD_URL) \
| \
| etc, etc
Тогда в свой рецепт положите
@echo $(subst | ,$$'\n',$(ANNOUNCE_BODY))
Это работает, потому что Make заменяет все вхождения |
(обратите внимание на пробел) и заменяет его символом новой строки ($$'\n'
). Вы можете думать, что эквивалентные вызовы shell-скрипта выглядят примерно так:
До:
$ echo "Version 1.1.1 of Foo Bar has been released. | | It can be downloaded from https://go.get/some/thing.tar.gz | | etc, etc"
После того, как:
$ echo "Version 1.1.1 of Foo Bar has been released.
>
> It can be downloaded from https://go.get/some/thing.tar.gz
>
> etc, etc"
Я не уверен, доступен ли $'\n'
в системах, отличных от POSIX, но если вы можете получить доступ к одному символу новой строки (даже читая строку из внешнего файла), основной принцип тот же.
Если у вас много подобных сообщений, вы можете уменьшить шум, используя макрос :
print = $(subst | ,$$'\n',$(1))
Где бы вы вызывали это так:
@$(call print,$(ANNOUNCE_BODY))
Надеюсь, это кому-нибудь поможет. =)