我正在尝试编写一个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
宏分配给由空格分隔的目录列表。
答案 0 :(得分:0)
您对make变量引用和shell变量引用感到困惑。请记住,make会将任何字符串(如$(FOO)
)解释为对 make 变量的引用,查找具有该名称的变量,并将该引用替换为该值。你的基于shell的for
循环创建了一个名为DIR的 shell 变量,但由于你只有$(DIR)
,make正在尝试(并且失败)找到一个make变量叫做DIR。
你的解决方案是有效的,因为双$
阻止make做自己的变量引用解析,所以文字$(DIR)
被传递给shell,然后shell自己做出变量解析!当然,这是有效的,因为for
循环创建了DIR变量。