Makefile schlägt fehl, wenn CygWin in Path ist

936
DavidPostill

Ich versuche herauszufinden, warum ein einfacher Windows-Befehl in Makefile nur fehlschlägt , wenn der binäre Ordner CygWin in der Variablen PATH enthalten ist.

Um die meisten Variablen aus der Gleichung herauszunehmen, verwende ich das Barebone-Makefile unten:

clean: del /F /Q file.txt 

Ich bin mit GNU 3,81 aus einem Verzeichnis, die nur enthält make.exe und Make - Datei .

C:\temp\test>dir /b make.exe makefile  C:\temp\test>make -v GNU Make 3.81 Copyright (C) 2006 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  This program built for Windows32 

Wenn PATH den Cygwin-Binärordner enthält, erhalte ich einen ProcessCreate () - Fehler.

C:\temp\test>path=c:\tools\cygwin\bin  C:\temp\test>make clean del /F /Q file.txt process_begin: CreateProcess(NULL, del /F /Q file.txt, ...) failed. make (e=2): The system cannot find the file specified. make: *** [clean] Error 2 

Ansonsten funktioniert es wie erwartet.

C:\temp\test>set path=  C:\temp\test>make clean del /F /Q file.txt Could Not Find C:\temp\test\file.txt 

Das macht für mich keinen Sinn.
Irgendeine Idee, was hier passieren könnte?

0
Ich glaube, ich weiß, was das Problem ist. Ich gebe Ihnen keine Antwort (weil dies nicht die richtige Seite für diese Frage ist und ich möchte nicht mehr Fragen auf der falschen Seite ermutigen), aber ich schlage vor, dass Sie nachschlagen, was "PATH" dann tut Schauen Sie sich das Verzeichnis `cygwin / bin` an. wizzwizz4 vor 7 Jahren 2

1 Antwort auf die Frage

1
Hector Psih

Nach mehr Experimenten und Lesen habe ich einige Fortschritte gemacht. Ich glaube, ich verstehe jetzt die Logik.

Es scheint, dass alle Rezeptbefehle im Makefile ausschließlich Shellbefehle sind, sobald sich sh.exe im Ordner befindet PATH. Sie können keine Windows-Befehle sein.

Nach dem Entfernen von sh.exe funktionierte cygwin/bindas ursprüngliche Makefile wie erwartet. 'cmd' kann auch explizit anstelle des Standard-'sh' im Makefile angegeben werden:

clean: cmd /c 'del /F /Q file.txt' 

Wenn dies richtig ist, ist dies etwas enttäuschend. Dadurch, dass cygwin/binin der ‚PATH‘ Ich war die Annahme, beide Arten von Befehlen in der Make - Datei verwendet werden könnten, wie auf den Windows - Befehlen oder in Batch - Datei.

Was für mich immer noch nicht sinnvoll ist, ist, dass Windows-Befehle funktionieren, wenn sh.exe nicht in Reichweite ist. Noch fehlt ein Teil der Logik.

(Entschuldigung für das Posten auf der falschen Seite. Ich dachte, ich wäre bei stackoverflow. Wenn der Moderator diesen Beitrag verschieben oder löschen kann, tun Sie dies bitte.)

Ich habe es zu Super User verschoben, weil es hierher gehört, nicht [also] (es handelt sich nicht speziell um eine Programmierfrage). Wenn Sie derselbe Benutzer sind, der diese Frage gestellt hat, stellen Sie sicher, dass Sie angemeldet sind, bevor Sie in Zukunft posten. wizzwizz4 vor 7 Jahren 0