Linux 为什么';chmod命令是否将DIR的内容识别为目录?
我正在尝试编写一个makefile,以便在执行时执行以下操作:Linux 为什么';chmod命令是否将DIR的内容识别为目录?,linux,makefile,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 DI
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\u LIST
宏分配给一个目录列表,目录列表用空格分隔。您会被make变量引用和shell变量引用弄糊涂。请记住,make会将任何类似$(FOO)
的字符串解释为make变量的引用,用该名称查找变量,并用值替换引用。基于shell的for
循环创建了一个名为DIR的shell变量,但由于您刚刚使用了$(DIR)
,make试图(但失败)找到名为DIR的make变量
您的解决方案之所以有效,是因为double
$
阻止make执行自己的变量引用解析,因此将literal$(DIR)
传递给shell,然后shell执行自己的变量解析!当然,这是可行的,因为for
循环创建了DIR变量。DIR\u LIST包含什么?紧靠chmod
语句之前的echo
语句显示什么?它只是一个目录列表,用空格分隔。例如:/tmp/justin1/tmp/justin2/tmp/justin3这是我问题的一半。您能告诉我们设置目录列表的实际行吗?这段代码是从您的Makefile中逐字剪切粘贴的吗?在示例Makefile中设置DIR\u LIST
后运行该代码时,该代码看起来很好,工作正常。。TB_DIR=$(CMVC_VIEW)/tarball_images SMAC_TOOLS=$(TB_DIR)/SMAC_TOOLS SMAC_BIN=$(SMAC_TOOLS)/BIN DIR列表=$(TB_DIR)\$(SMAC_TOOLS)\$(SMAC_BIN)` echo语句将显示每个目录,后跟一个换行符。出于某种原因,$${DIR}可以与echo一起使用,但不能与chmod 2775一起使用。