2017-06-05 2 views
0

Ich habe diese Makefile:/bin/sh: 1: Syntaxfehler: Wort unerwartet (erwartet ")")

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 

ich zuerst überprüfen möchten, ob das Verzeichnis tmp vorhanden ist oder nicht, und es schaffen nur wenn es nicht existiert. Dies funktioniert, aber mit einem seltsamen Fehler:

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

Warum gibt es diese seltsamen /bin/sh: 1: Syntax error: word unexpected (expecting ")") Fehler entdeckt? Und wie löst man das?

+0

Das sieht aus wie es sein sollte nur Version: $ {TMP_DIR} 'und' $ {TMP_DIR}:; mkdir -p $ {TMP_DIR} '. – melpomene

+0

'mkdir -p' erstellt das Verzeichnis nur, wenn es nicht bereits existiert. – Beta

+0

FYI, das Verhalten von 'echo -n' ist nicht POSIX-definiert (POSIX explizit * erlaubt * ein' echo', sein Verhalten basierend auf einem '-n' Flag zu modifizieren - Kontrast mit' echo -e', was ist in Verletzung, wenn es nicht '-e' auf Ausgabe ausgibt, aber sein Verhalten nicht angibt, wenn dieses Flag angegeben wird. Verwenden Sie 'printf% s foo 'statt' echo -n foo'. –

Antwort

5

In einem Makefile ist das Rezept ein Shell-Skript. Sie versuchen, make constructs wie ifeq in Ihr Rezept zu setzen. Make übergibt diese an die Shell und die Shell löst diesen Fehler aus, weil sie die Syntax von Makefile nicht versteht.

Sie sollten Ihr Rezept mit Shell-Skripten schreiben, nicht Make-Datei Syntax:

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

Obwohl, warum Sie sich interessieren, wenn das Verzeichnis bereits vorhanden ist, weiß ich nicht; Ich würde persönlich nur verwenden:

version: 
     mkdir -p ${TMP_DIR} 
+0

Man kann hinzufügen: 'Version: $ {TMP_DIR} \ n $ {TMP_DIR}: \ n mkdir $ {TMP_DIR}' auch. (Der Kommentar Markup aß meine Whitespaces, aber ich hoffe du weißt was ich meine) – ArturFH

Verwandte Themen