我有以下make文件,我认为它是一个shell脚本。
我正在尝试遍历FILE_DIR
以执行某些操作。但是,我觉得实施工作没有按预期工作。所以我想插入一些echo
断点。
来源:
# Target to recurse through the DIR_LIST and make each makefile found in that DIRS
ALLDIRS:
for se in $(FILE_DIR); do \
if [ -d $se ]; then \
cd $se; \
$(MAKE) -f Makefile.mk all; \
cd ..; \
fi \
done
运行:
$ make -f Makefile.batch
h: syntax error at line 3: `then' unexpected
*** Error code 2
The following command caused the error:
for se in `ls -p /app/internal|grep "/"`; do \
echo "Test" \
if [ -d e ]; then \
cd e; \
/usr/ccs/bin/make -f Makefile.mk all; \
cd ..; \
fi \
done
make: Fatal error: Command failed for target `ALLDIRS'
我可以请你帮忙吗?想插入一个echo
断点。
答案 0 :(得分:4)
Makefile
中的一个常见错误是在命令行中使用空格而不是制表符。检查整个for
循环并确保每行的开头只有制表符
ALLDIRS:
<tab>for se in $(FILE_DIR); do \
<tab><tab>if [ -d $se ]; then \
<tab><tab>cd $se; \
<tab><tab>$(MAKE) -f Makefile.mk all; \
<tab><tab>cd ..; \
<tab><tab>fi \
<tab>done
另一个错误是美元符号$
。如果你想在shell命令中使用美元符号,你必须在命令中加倍,因为否则美元会引入一个 make变量,并且会在shell看到它之前展开。
for se in $(FILE_DIR); do \
if [ -d $$se ]; then \
cd $$se; \
$(MAKE) -f Makefile.mk all; \
cd ..; \
fi \
done
最后一个,echo Test
也需要一个分号
for se in $(FILE_DIR); do \
if [ -d $$se ]; then \
echo "Test"; \
cd $$se; \
...