If you're using GNU make, you can use the `define` syntax for [multi-line variables]:
```make
define message =
You can also include make macros like
$$@ = $@
in a multi-line variable
endef
help:; @ $(info $(message)) :
```
By playing with the [`value`][value] function and the [`export`][export] directive, you can also include a whole script in your Makefile, which will allow you to use a multi-line command without turning on `.ONESHELL` globally:
```make
define _script
echo SHELL is $SHELL, PID is $$
cat <<'EOF'
literally $SHELL and $$
EOF
endef
export script = $(value _script)
run:; @ eval "$$script"
```
will give
```
SHELL is /bin/sh, PID is 12434
literally $SHELL and $$
```
[multi-line variables]: https://www.gnu.org/software/make/manual/make.html#Multi_002dLine
[value]: https://www.gnu.org/software/make/manual/make.html#Value-Function
[export]: https://www.gnu.org/software/make/manual/make.html#Variables_002fRecursion