局部变量在 gnu Makefile 中不起作用?

Local variables not working in a gnu Makefile?

我 运行 makemacOS 上,对任何局部变量都不满意。采取此片段旨在获取 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=

所以我们看到 none 的局部变量是可操作的。在 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