AIX make/makefile:变量赋值不起作用

AIX make/makefile : variable assignment is not working

标准 AIX make 工具是否有一些使用动态变量的技巧? 我希望根据底层主机名创建不同的目录:

# makefile
thisHOSTNAME=`hostname`

all: $(thisHOSTNAME) makeMyDir

machine-1:
    TMP_DIR=V1

machine-2:
    TMP_DIR=V2

makeMyDir:
    @echo makeMyDir TMP_DIR=$(TMP_DIR)
# mkdir -p $(TMP_DIR)  !! NOT WORKING

在运行"make all"上,原来$TMP_DIR是空的!? 目标中的依赖项 $(thisHOSTNAME) 全部被正确解析,相应的目标被执行,但是变量 TMP_DIR 并没有保持它看起来的赋值。

$ 全部

TMP_DIR=V2
makeMyDir TMP_DIR=

如果您没有 GNU make 扩展(即 shellif*),那么它会变得丑陋:

# Makefile

all: makeMyDir

thisbox:
    mkdir -vp thisdir

thatbox:
    mkdir -vp thatdir

makeMyDir: $(HOSTNAME)

然后在调用时注入环境变量:

$ HOSTNAME=$(hostname) make -e

参考文献:

反引号语法是shell语法,不是make语法。您可以将它用作命令中使用的变量的值,但不能将它用作目标名称,如

thisHOSTNAME=`hostname`
all: $(thisHOSTNAME) makeMyDir

明白这就变成了

all: `hostname` makeMyDir

并使 all 依赖于目标 hostname 包括 反引号(我不知道如何在此处插入),因为指定了依赖项在 make 语法中。

我不确定 AIX make 是否允许使用允许

的 GNU make 语法
thisHOSTNAME = $(shell hostname)

如果没有,您可能会考虑将 AIX 生成文件转换为 GNU 生成文件。