2012-03-25 10 views
2

Ich verwende MinGW 3.18 unter Windows XP SP2, GNU make 3.82.MinGW/GNU Make - "mehrere Zielmuster"

Ich versuche, einen Wert von einem Skript in einem Pfad enthalten und einen Fehler erhalten.

Dies funktioniert:

PROD_DIR=$(ROOT_DIR)/PROD 
version=1.1.1 

PROD_SOURCE_files = \ 
    file1 \ 
    file2 

PROD_TARGET_files = $(patsubst %,$(PROD_DIR)/$(version)/%,$(PROD_SOURCE_files)) 

Dies gilt nicht:

PROD_DIR=$(ROOT_DIR)/PROD 
version=`get_version.sh` 

PROD_SOURCE_files = \ 
    file1 \ 
    file2 

PROD_TARGET_files = $(patsubst %,$(PROD_DIR)/$(version)/%,$(PROD_SOURCE_files)) 

Makefile:1359: *** multiple target patterns. Stop. 

(Linie 1359 ist die Definition von PROD_TARGET_files)

Ich habe doppelt geprüft $ (Version), es hat in beiden Fällen den gleichen Wert, mit scheinbar keinen führenden/nachfolgenden Leerzeichen oder Zeilenumbrüchen:

@echo [$(version)] 
[1.1.1] 
+4

Sie haben ein Makefile, die (mindestens) 1359 Zeilen lang ist? Das bringt mich dazu, zu weinen! –

+0

Sind Sie sicher, dass der Wert gleich ist? Wenn es beispielsweise den Befehl nicht finden kann, wird er auf '/ bin/sh: get_version.sh: command not found' gesetzt, was Doppelpunkte enthält und genau dieses Problem verursachen würde. –

Antwort

2

Backticks (`) sind eine Bash-Sache, keine Make-Sache.

Wenn Sie an eine externe Schale rufen wollen, sollten Sie die shell Funktion:

version=$(shell get_version.sh) 
+0

Backticks scheinen in gnu make zu funktionieren, selbst wenn $ (shell) wahrscheinlich besser für die Kompatibilität ist, sollte es nicht die Ursache des Problems sein. –

+0

@JoachimIsaksson: Es hängt davon ab, was Sie mit "Arbeit" meinen; Stellen Sie sie sicher nicht aus. –

+0

Dies löste das Problem, vielen Dank! – user1291416

Verwandte Themen