Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unix AIX make/makefile:变量分配不起作用_Unix_Makefile_Aix - Fatal编程技术网

Unix AIX make/makefile:变量分配不起作用

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

标准的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 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语法中指定的

      我不确定AIX
      make
      是否允许使用允许使用的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授权的。