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

时间:2015-12-16 16:58:54

标签: unix makefile aix

标准的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为空!? 目标all中的依赖项$(thisHOSTNAME)已正确解析,并执行相应的目标,但变量TMP_DIR不会保持它看起来的指定值。

$ make all

TMP_DIR=V2
makeMyDir TMP_DIR=

2 个答案:

答案 0 :(得分:2)

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

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

明白这会变成

all: `hostname` makeMyDir

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

我不确定AIX make是否允许使用允许的GNU make语法

thisHOSTNAME = $(shell hostname)

如果没有,您可能会考虑将AIX makefile转换为GNU makefile。

答案 1 :(得分:1)

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

# Makefile

all: makeMyDir

thisbox:
    mkdir -vp thisdir

thatbox:
    mkdir -vp thatdir

makeMyDir: $(HOSTNAME)

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

$ HOSTNAME=$(hostname) make -e

参考文献: