it-swarm.com.de

Makefile-Fehler make (e = 2): Das System kann die angegebene Datei nicht finden

Ich verwende ein Makefile in Windows, um einige Dateien auf einen Unix-Server zu verschieben (hier eine Textdatei "blob.txt" im selben Ordner meines Makefiles) .. .. Mein Makefile-Skript lautet:

setup:
        pscp blob.txt [email protected]:/folder/

Ich starte eine Eingabeaufforderung, gehe in den Ordner, in dem sich blob.txt und das Makefile befinden, und tippe:

make setup

Was in ... resultiert:

pscp blob.txt [email protected]:/folder/
process_begin: CreateProcess(NULL, pscp blob.txt [email protected]:/folder/, ...) failed.
make (e=2): The system cannot find the file specified.
make: *** [setup] Error 2

In einem #fail ... wenn ich den Befehl direkt in der Eingabeaufforderung eingebe:

pscp blob.txt [email protected]:/folder/

Es funktioniert ... Ich wundere mich wirklich warum.

12
Colonel Beauvel

Der Fehler

process_begin: CreateProcess(NULL, pscp blob.txt [email protected]:/folder/, ...) failed.
make (e=2): The system cannot find the file specified.

beklagt sich fast sicher, dass Windows pscp nicht finden kann.

Dies ist fast sicher, weil der Wert von %PATH% (oder was auch immer) anders ist, wenn make eine Shell/Konsole erzeugt, wenn Sie sie manuell öffnen.

Vergleichen Sie die Werte, um dies zu bestätigen. Verwenden Sie dann entweder den vollständigen Pfad zu pscp im Makefile-Rezept oder stellen Sie sicher, dass der Wert von PATH für die Verwendung von make richtig festgelegt ist.

10
Etan Reisner

In meinem Fall hatte ich git\bin in meinem %PATH%, der bash.exe und sh.exe enthält. Das Entfernen von %GIT_HOME%\bin von PATH hat für mich funktioniert

6
user3869623

Die Lösung von @ user3869623 funktioniert für mich. Ich möchte einige Details von mir mitteilen, um das Bild zu vervollständigen.

Mein Makefile enthält unter target:

clean:
    @echo '$(OS)'
ifeq ($(OS),Windows_NT)
    del /s *.o *.d *.elf *.map *.log
endif

Wenn ich make clean starte, sehe ich diesen Fehler:

 enter image description here

Da etwas besagt, dass mit echo etwas schiefgelaufen ist, ändere ich mein Makefile-Ziel in unter:

clean:

ifeq ($(OS),Windows_NT)
    del /s *.o *.d *.elf *.map *.log
endif

Dieses Mal gibt mir make clean diesen Fehler:

 enter image description here

Ich bin überrascht, bash hier zu sehen, seit ich in der Windows-Befehlszeile arbeite.

Dann habe ich meinen %PATH% überprüft, ich sehe diesen Eintrag:

C:\DevTools\Git\bin

Es gibt einen bash.exe und sh.exe in diesem Pfad. Also habe ich diesen Eintrag entfernt und er funktioniert jetzt einwandfrei.

ABER ich weiß immer noch nicht, warum BASH DIES IST ???

ADD 1

Warum der C:\DevTools\Git\bin in meinem %PATH% angezeigt wird, weil ich Sublime benutze und es immer nach den Git-Binaries fragt:

 enter image description here

5
smwikipedia

Ich weiß, dass dies eine alte Frage ist, die bereits beantwortet wurde, aber ich dachte, ich würde und meine Erfahrungen für jeden, der sich noch damit beschäftigt hat. Ich bekam den gleichen kryptischen Fehler, Colonel Beauvel (obwohl mit dem Windows-Befehl MOVE, nicht mit pscp): 

process_begin: CreateProcess(NULL, move /y foo\bar.c .\baz.c, ...) failed.
make (e=2): The system cannot find the file specified.

Unser CI lief das gleiche Makefile und funktionierte einwandfrei. Es stellte sich heraus, dass CI mingw32-make und ich GNU make verwendet hatte. Das Deinstallieren von GNU make (das als Teil eines nicht zusammenhängenden Massenpakets installiert wurde) und das Aliasing von mingw32-make to 'make' funktioniert einwandfrei.

4
TobyK

Um auf die Antwort von Benutzer3869623 aufzubauen. 

In meinem Fall hatte ich git\bin in meinem% PATH%, der bash.exe und sh.exe enthält. Das Entfernen von% GIT_HOME%\bin aus dem PATH funktionierte für mich

Diese Empfehlung kann zwar die Ausführung von make ermöglichen, führt jedoch möglicherweise zu Problemen mit git, insbesondere wenn das Makefile Software aus einem git-Repository installiert.

Eine bessere Lösung ist, %GIT_HOME%\bin einfach in %GIT_HOME%\cmd zu ändern.

1
jgrant

Wenn Sie versucht haben, den Ordner git bin aus PATH zu entfernen, und es für sie nicht funktionierte, suchen Sie Ihre PATH-Variablen nach Pfaden, die bash.exe enthalten.

In meinem Fall habe ich eine Variable gefunden, die auf den cygwin bin-Ordner C:\cygwin64\bin verweist, entfernt und es funktioniert.

0

Ich wollte den bin-Ordner von GIT nicht aus der PATH-Variable entfernen (ich verwende einen Windows-Computer), da ich ihn häufig benutze. Also habe ich nach einer Arbeit gesucht. Und hier ist es: 

Fügen Sie auch das <git-installation-directory>/usr/bin-Verzeichnis zu Ihrer PATH-Variablen hinzu. Dies fügt im Wesentlichen den Rest der linuxartigen Befehle, die mit der "GIT-Bash" geliefert werden, Ihrer Umgebung hinzu. Nach dem Auftragen liefen meine Makefiles wieder normal. :)

Wenn Sie wissen möchten, welche Shell von make aufgerufen wird, fügen Sie am Anfang Ihres Makefiles einfach $(info $(Shell)) hinzu. Der Pfad/Name der aufgerufenen Shell wird auf die Konsole geschrieben, sobald Sie make ausführen.

0
Ricardo Alejos