本地变量在gnu Makefile中不起作用



我在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

最新更新