0

我有以下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断点。

4

1 回答 1

4

s 中的一个常见错误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; \
...
于 2012-11-26T08:07:16.747 回答