0

次のメイクファイルがありますが、これはシェルスクリプトだと思います。

ループし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 でよくあるエラーの 1 つ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

別のエラーはドル記号$です。シェル コマンドでドル記号が必要な場合は、コマンドでドル記号を 2 倍にする必要があります。

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 に答える