Unix AIX make/makefile:变量分配不起作用
标准的aixmake工具是否有一些技巧来使用动态变量? 我希望根据基础主机名创建不同的目录:Unix AIX make/makefile:变量分配不起作用,unix,makefile,aix,Unix,Makefile,Aix,标准的aixmake工具是否有一些技巧来使用动态变量? 我希望根据基础主机名创建不同的目录: # 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 W
# 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
运行“makeall”时,发现$TMP_DIR是空的!?
目标all中的依赖项$(thisHOSTNAME)已正确解析,并执行相应的目标,但变量TMP_DIR并没有保持它看起来所分配的值
$makeall
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
并且使所有的依赖于目标主机名,包括反勾号(我不知道如何在这里插入),因为依赖项是在make语法中指定的
我不确定AIXmake
是否允许使用允许使用的GNU-make语法
thisHOSTNAME = $(shell hostname)
如果没有,您可能会考虑将AIX makefile转换为GNU makefile。AIX make是否支持$(shell cmd)
?如果“make”工具实际上是GNUmake,并且具有所有灵活性和选项,那么此解决方案效果很好,但不幸的是,我被迫使用的make工具是安装在AIX上的本机make。本机make既不支持$(shell cmd)也不支持“ifeq”constructs@Jens,@Fandango,很对;shell
命令是GNU扩展。我已经修改了我的答案(希望是)更好的地址;仍在努力解决缺乏ifeq
support的问题,我只能看到一种可能性,你们都指出了这一点,即在make的环境中设置un环境变量。我将在shell脚本中包装make调用,以适当地设置TMP_DIR。感谢您在我的测试中,反勾号不会带来任何问题:是的,“all”依赖于一个名为主机名的目标,如果这样的目标确实存在(在我的示例machine-1和machine-2中),make会找到目标。这实际上可以在我的机器(AIX6.1)上运行。但是,它似乎没有为这些属性赋予TMP_DIR任何值targets@Fandango调用使这个主机名=$(主机名)
怎么样?这适用于make的所有版本,因为它是POSIX授权的。