1

私はこれ(make)の初心者で、ファイル内のテキストをgrepしようとして(Windowsでのmakeプロセスの一部として)いくつか問題があります。私が解決しようとしているより大きな問題は、特定のディレクトリ内のすべてのバイナリ実行可能ファイルがそれぞれの依存関係を満たしているかどうかを確認することです。後の部分では、依存関係の検証に失敗した場合は出力ファイルを grep しようとしている depends.exe (Dependency Walker) を使用し、ビルド プロセスを中止する可能性があります。

binary-dependency-validate:
for BINARYEXEC in $(shell $(PATH_TO_FIND_EXE) $(PRE_DEFINED_DIR) -name "*.exe"); do \
   $(PATH_TO_DEPENDS_EXE) /c /pb /ot $(PRE_DEFINED_DIR)/$$BINARYEXEC-depends.txt $(PRE_DEFINED_DIR)/$$BINARYEXEC ; \
   ifeq ($(shell $(PATH_TO_GREP_EXE) "Error: At least one required implicit or forwarded dependency was not found." $(PRE_DEFINED_DIR)/$$BINARYEXEC-depends.txt),); \
      @echo "Dependency ok" ; \
   endif ; \
done

次のエラーが発生します。

line 1: syntax error near unexpected token `,'

どんな提案でも大いに役立ちます。この投稿を見て、インデントなしで ifeq を揃えてみました (これも役に立ちませんでした)。

4

2 に答える 2

1

問題は、Make言語とシェル言語を混在させていることです。

makefile にはルールが含まれており、ルールにはシェルによって実行されるコマンドが含まれています。

target:
    first command
    second command

コマンドはシェル言語であり、各コマンドの前に TAB を付ける必要があります。

Makeには条件があります:

ifeq (foo, bar)
  VAR = something      
endif

(くぼみは目だけです。)

さまざまなスクリプト言語にも条件があります。

if [ -f log ]
  then
    echo "log exists."
fi

Make 条件は、ルール内でコマンドを囲むことができます。

target:
ifeq (foo, bar)
    first command
endif
    second command

Make はルールを実行する前にこの条件を評価します。また、またはの前に TAB があってはなりません。これは、Make がそれらをシェルに渡すコマンドとして解釈してはならないためです。ifeqendif

コマンド (ルール内) には、シェル条件を含めることができます。

target:
    if [ -f log ]; \
  then echo "log exists." ; \
  fi

前のインデントifはTABです。他の空白は目用です。

あなたのメイクファイルには、シェルコマンドの途中に Make 条件があります。Make はコマンドの実行前に条件を評価できず、シェルは Make 構文を理解できません。シェル条件を使用する必要があります。

于 2012-08-13T14:19:16.953 に答える
0

ifeq 行にコンマがあるようです

binary-dependency-validate:
for BINARYEXEC in $(shell $(PATH_TO_FIND_EXE) $(PRE_DEFINED_DIR) -name "*.exe"); do \
   $(PATH_TO_DEPENDS_EXE) /c /pb /ot $(PRE_DEFINED_DIR)/$$BINARYEXEC-depends.txt $(PRE_DEFINED_DIR)/$$BINARYEXEC ; \
   ifeq ($(shell $(PATH_TO_GREP_EXE) "Error: At least one required implicit or forwarded dependency was not found." $(PRE_DEFINED_DIR)/$$BINARYEXEC-depends.txt)); \
      @echo "Dependency ok" ; \
   endif ; \
done
于 2012-08-12T05:24:37.777 に答える