2017-06-05 6 views
0

)(期待 ")" 予期しない単語このMakefile/binに/ SH:1:構文エラー:私は

TMP_DIR := tmp 
RUN_OR_NOT := $(shell date '+%y%m%d%H%M') 

all: version 

version: 
    ifeq ($(shell test -d ${TMP_DIR} && echo -n "yes";),yes) 
     $(shell echo ${TMP_DIR} already exists ...) 
    else 
     $(shell mkdir -p ${TMP_DIR}) 
    endif 

私はディレクトリtmpが存在するかどう、まずチェックしたい、そしてそれを作成それが存在しなければ、それだけです。これは動作しますが、奇妙なエラーで:

ifeq (yes,yes) 
/bin/sh: 1: Syntax error: word unexpected (expecting ")") 
Makefile:7: die Regel für Ziel „version“ scheiterte 
make: *** [version] Fehler 2 

なぜこの奇妙な/bin/sh: 1: Syntax error: word unexpected (expecting ")")誤差はありますか?そして、これを解決する方法は?

+0

それはちょうど 'version:$ {TMP_DIR}'と '$ {TMP_DIR}:であるように見えます。 mkdir -p $ {TMP_DIR} 'となります。 – melpomene

+0

'mkdir -p'は、ディレクトリが存在しない場合にのみ作成します。 – Beta

+0

FYI、 'echo -n'の動作はPOSIXで定義されていません(POSIXは明示的に' '-e''が' -n'フラグに基づいて動作を変更することを許可します。出力に '-e'を出力しなければ違反しますが、フラグが与えられたときの動作は指定しません)。 'echo -n foo'の代わりに' printf%s foo'を使うことを検討してください。 –

答えて

5

メイクファイルでは、レシピはシェルスクリプトです。あなたはifeqのような構造をあなたのレシピに入れようとしています。 Makeはそれらをシェルに渡し、シェルはmakefileの構文を理解していないためこのエラーをスローします。

あなたはシェルスクリプトではなく、メイクファイルの構文を使用して、あなたのレシピを書く必要があります。

version: 
     if test -d ${TMP_DIR}; then \ 
      echo ${TMP_DIR} already exists ...; \ 
     else \ 
      mkdir -p ${TMP_DIR}; \ 
     fi 

ディレクトリがすでに存在する場合は、あなたが気にする理由が私にはわかりません。私は個人的にちょうど使用します:

version: 
     mkdir -p ${TMP_DIR} 
+0

バージョン:$ {TMP_DIR} \ n $ {TMP_DIR}:\ n mkdir $ {TMP_DIR} 'を追加することもできます。 (コメントマークアップは私の空白を食べましたが、私が何を意味するかを知っていれば幸いです) – ArturFH

関連する問題