我在macOS
上运行make
,它对任何局部变量都不满意。以这个片段为例,它旨在获得Makefile脚本目录的完整路径
setup_for_run:
mkfile_path=$(abspath $(lastword $(MAKEFILE_LIST)))
mkfile_dir=$(dir $(mkfile_path))
echo "scriptdir=$(SCRIPT_DIR)"
export PATH=$($(SCRIPT_DIR)/.venv/bin:$(PATH))
make setup_for_run
的结果是:
$make setup_for_run
mkfile_path=/Users/steve/git/hercl/Makefile
mkfile_dir=
echo "scriptdir="
scriptdir=
export PATH=
所以我们看到没有一个局部变量是可操作的。如何在默认安装在macOS
上的gnu make
中激活它们?
Make在自己的shell中运行配方中的每个命令(除非声明.ONESHELL
(。每个命令都会清除任何修改过的状态,例如变量。而且,任何变量集都不会在make之外进行通信。为此,您可能更希望source
是一个bash脚本。
Make用于从其他文件制作文件。
有几种设置变量的替代方案:
# Global scope
VARIABLE := myglobal
# Target specific
mytarget: VARIABLE := targetspecific
# Prefix the command
myprefix:
VARIABLE=prefix env