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
扩展(即 shell
和 if*
),那么它会变得丑陋:
# 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 生成文件。
标准 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
扩展(即 shell
和 if*
),那么它会变得丑陋:
# 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
是否允许使用允许
thisHOSTNAME = $(shell hostname)
如果没有,您可能会考虑将 AIX 生成文件转换为 GNU 生成文件。