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

  • 本文关键字:识别 DIR chmod 命令 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

但是,当生成文件运行时,我收到一个错误,说 chmod:2775后缺少操作数。 我不明白为什么会发生这种情况,因为$${DIR}应该包含与需要更改其访问权限的目录相对应的路径。

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

出于此生成文件的目的,假设DIR_LIST宏分配给以空格分隔的目录列表。

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

您的解决方案之所以有效,是因为双$阻止 make 执行自己的可变引用分辨率,因此文本$(DIR)被传递给 shell,然后 shell 执行自己的可变分辨率! 当然,这是有效的,因为for循环创建了DIR变量。

最新更新