在 Makefile 目标中定义局部变量

And*_*mov 6 makefile gnu-make

如何在Makefile目标中定义局部变量?

我想避免重复文件名,例如:

zsh:
    FILENAME := "text.txt"
    @echo "Copying ${FILENAME}...";
    scp "${FILENAME}" "user@host:/home/user/${FILENAME}"
Run Code Online (Sandbox Code Playgroud)

但我收到错误:

FILENAME := "text.txt"
/bin/sh: FILENAME: command not found
Run Code Online (Sandbox Code Playgroud)

与相同$(FILENAME)

zsh:
    export FILENAME="text.txt"
    @echo "Copying ${FILENAME} to $(EC2)";
Run Code Online (Sandbox Code Playgroud)

给我一个空值:

Copying ...
Run Code Online (Sandbox Code Playgroud)

Mad*_*ist 12

您不能在配方中定义 make 变量。配方在 shell 中运行,并且必须使用shell 语法

如果要定义 make 变量,请在配方外部定义它,如下所示:

FILENAME := text.txt
zsh:
        @echo "Copying ${FILENAME}...";
        scp "${FILENAME}" "user@host:/home/user/${FILENAME}"
Run Code Online (Sandbox Code Playgroud)

请注意,在将值分配给 make 变量时,在值周围添加引号实际上是不正确的。Make 不关心引号(在变量值或扩展中),也不以任何方式特殊对待它们。