tri*_*t78 13 make documentation here-document
我使用的Makefile
默认步骤是打印其他选项的帮助文档。EOF
如果我可以添加一个部分而不是多个,那就太好了echo
。是否可以EOF
像Makefile
bash 脚本一样使用它?
小智 14
如果您使用 GNU make,则可以使用多行变量的define
语法:
define message =
You can also include make macros like
$$@ = $@
in a multi-line variable
endef
help:; @ $(info $(message)) :
Run Code Online (Sandbox Code Playgroud)
通过使用value
函数和export
指令,您还可以在 Makefile 中包含整个脚本,这将允许您使用多行命令而无需.ONESHELL
全局打开:
define _script
echo SHELL is $SHELL, PID is $$
cat <<'EOF'
literally $SHELL and $$
EOF
endef
export script = $(value _script)
run:; @ eval "$$script"
Run Code Online (Sandbox Code Playgroud)
会给
SHELL is /bin/sh, PID is 12434
literally $SHELL and $$
Run Code Online (Sandbox Code Playgroud)
简单的答案是“不是默认的”。但是你可以配置 GNU make 来允许它使用.ONESHELL:
通常,配方中的每一行都在其自己的 shell 中执行。更糟糕的是,有一种方法可以在 make 中制作多行命令,\
在行尾使用 a 来继续它。 不幸的是,这\
也被传递到 shell,这对于其他命令来说不是什么问题,但对于 Heredoc 来说它确实弄乱了语法。
但是,如果您启用.ONESHELL:
,此逻辑会发生变化,并且命令将在单个 shell 中执行,从而使其能够工作:
.ONESHELL:
all:
cat << EOF
aaa
bbb
EOF
Run Code Online (Sandbox Code Playgroud)
请注意,这将对 Make 的功能产生其他影响。最值得注意的是,如果一条构建线后面跟着其他构建线,那么 Make 可能不会注意到该构建线是否失败。通常会检查每一行的结果,但使用.ONESHELL:
make 只能看到所有行的结果。
归档时间: |
|
查看次数: |
8441 次 |
最近记录: |