2016-07-23 8 views
0
FOLDER_NAME = $* 

%.clean: 
ifeq ($(FOLDER_NAME),cdr) 
    @ echo " condition passed $(FOLDER_NAME)" 
else 
    @ echo " condition failed $(FOLDER_NAME)" 
endif 

これでmake cdr.cleanを実行すると、以下の出力が表示されます。 条件が失敗しました。以下のメイクファイルの状態を取得するには

問題の原因を特定できません。

+0

ようこそ。これは有効なメイクファイルではありません。あなたが "make on it"を実行すると、 は構文エラーが表示されます。あなたの問題 を再現する最小限の完全なmakefileを投稿してください。 –

+0

@Mike完全なメークファイルの内容で更新しました – chozhan

答えて

1

条件付きifeqは、メイクファイルが読み込まれるときに評価されます。そのとき、$*は空の文字列になるので、ifeqは空の文字列FOLDER_NAMEとなります。 $*は、後で実行時にルールが評価された場合にのみ意味を持ちます。

目的を達成するために、異なるケース(* clean2)に異なるルールを定義するか、シェルコマンドを使用して条件を評価します(* clean3)。

FOLDER_NAME = $* 

cdr.clean2: 
     @ echo " condition passed $(FOLDER_NAME)" 

%.clean2: 
     @ echo " condition failed $(FOLDER_NAME)" 

%.clean3: 
     @ if [ $(FOLDER_NAME) == cdr ]; \ 
      then echo " condition passed $(FOLDER_NAME)" ; \ 
      else echo " condition failed $(FOLDER_NAME)"; \ 
      fi 
関連する問題