为什么chmod命令没有将DIR的内容识别为目录?

时间:2012-06-06 18:08:30

标签: linux makefile

我正在尝试编写一个makefile来执行以下操作:

CMVC_VIEW = ../../.. 
TB_DIR = $(CMVC_VIEW)/tarball_images 
SMAC_TOOLS = $(TB_DIR)/smac_tools 
SMAC_BIN = $(SMAC_TOOLS)/bin 
DIR_LIST = $(TB_DIR) \
    $(SMAC_TOOLS) \
    $(SMAC_BIN)

install:
    rm -f *.o
    for DIR in $(DIR_LIST); do \
      echo $${DIR}; \
      chmod 2775 $${DIR}; \
    done

然而,当运行makefile时,我得到一个错误,说明chmod:在2775之后缺少操作数。鉴于$${DIR}应包含与需要更改其访问权限的目录对应的路径,我不明白为什么会发生这种情况。

当我用静态目录路径替换$${DIR}时,这似乎有效。

出于此makefile的目的,假设将DIR_LIST宏分配给由空格分隔的目录列表。

1 个答案:

答案 0 :(得分:0)

您对make变量引用和shell变量引用感到困惑。请记住,make会将任何字符串(如$(FOO))解释为对 make 变量的引用,查找具有该名称的变量,并将该引用替换为该值。你的基于shell的for循环创建了一个名为DIR的 shell 变量,但由于你只有$(DIR),make正在尝试(并且失败)找到一个make变量叫做DIR。

你的解决方案是有效的,因为双$阻止make做自己的变量引用解析,所以文字$(DIR)被传递给shell,然后shell自己做出变量解析!当然,这是有效的,因为for循环创建了DIR变量。