标准的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=
答案 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
扩展名(即shell
和if*
),那么它会变丑:
# Makefile
all: makeMyDir
thisbox:
mkdir -vp thisdir
thatbox:
mkdir -vp thatdir
makeMyDir: $(HOSTNAME)
然后在调用上注入环境变量:
$ HOSTNAME=$(hostname) make -e
参考文献: