Ich habe ein Problem, dass ich einfach nicht meinen Kopf wickeln kann. Ich habe ein minimales Beispiel-Makefile, das eine sehr einfache .c-Datei in ein ausführbares Programm kompilieren soll.Genau die gleiche Befehlszeile erzeugt einen Fehler in Make, ist aber erfolgreich, wenn es von Shell ausgeführt wird
Wenn ich laufen machen, startet der Compiler kompiliert und erzeugt dann eine Fehlermeldung
"T:\printOffsets.c:10:21: error: bootIfc.h: No such file or directory"
Dann kopiere ich die exakt gleiche Kommandozeile machen wird mit dem Ziel zu bauen und führen Sie es direkt in die gleiche Windows-Shell-Instanz, und die Kompilierung ist plötzlich fehlerfrei! Die Befehlszeile lautet (Pfadnamen wurden vereinfacht):
T:\perl\c\bin\gcc.exe T:\printOffsets.c -IT:\include\ -o D:\printOffsets.exe
Woher weiß ich das? Nun, make druckt die Befehlszeile, bevor es ausgeführt wird, also kopiere ich einfach & Paste aus der Shell.
Ich verstehe es nicht! Wie ist das möglich?? Wie kann derselbe Befehl auf der Shell funktionieren und fehlschlagen, wenn er von einem Makefile gestartet wird ??
Ich benutze übrigens GNU Make 3.82 unter Windows 7.
Könnten Sie mit Schrägstriche versuchen statt Schrägstriche? Ich glaube, ich habe irgendwann das gleiche Problem und die Verwendung von Schrägstrichen war in einigen Fällen besser. – jdarthenay
Vielleicht nutzt Make auch nicht die Shell, von der Sie glauben, dass Sie ein Ziel in Ihrem Makefile hinzufügen können, um echo $ (SHELL) zu starten? – jdarthenay
@jdarthenay Sie sind genau richtig !! Es verwendet sh.exe, nicht die Windows-Befehlsshell! Und das Ersetzen aller Backslashes durch Schrägstriche hat das Problem behoben! Könntest du deinen Kommentar als Antwort posten, damit ich ihn annehmen/abstimmen kann? – antred