ich hatte genau das gleiche Problem und dank der temporäre Lösung, es endete arbeiten. Allerdings habe ich ein wenig mehr gegraben und herausgefunden, was zumindest vor sich geht. Wenn Sie
make --debug=j
laufen werden Sie sehen, dass, wenn Sie den #
Charakter hinzufügen, make
läuft eigentlich
mkdir _build #
CreateProcess(NULL,C:/Program Files/GNU ARM Eclipse/Build Tools/2.6-201507152002/bin/sh.exe -c "mkdir _build #",...)
Es sollte eigentlich Sinn, dass dies nur funktioniert, wie mkdir
nicht eine tatsächliche ausführbare Datei ist in Windows, aber ein Befehl interpretiert nur innerhalb einer Windows-Shell. Ich habe etwas durch den Quellcode make
(für Win32) gegraben, und es scheint, als ob es ziemlich viel hardcoded Logik für die Entscheidung, welche Befehle sh
durchlaufen und welche Befehle versuchen, als ein Prozess zu starten. Ich bin nicht dazu gekommen, herauszufinden, welcher Anwendungsfall das #
-Symbol plötzlich dazu veranlasst, mkdir
in die Shell zu füttern, anstatt zu versuchen, den Prozess zu starten, aber Sie haben drei Möglichkeiten, um das "richtig" zu machen:
1) Verwenden Sie eine ausführbare Datei mkdir
, wie die in CoreUtils für Windows: http://gnuwin32.sourceforge.net/packages/coreutils.htm. Stellen Sie sicher, dass es natürlich in Ihrem Weg ist.
2) Ändern Sie den mkdir
-Befehl in cmd /c "mkdir [email protected]"
, was mkdir
an den nativen Befehlshandler in Windows liefern würde. In meinem Fall verwende ich nicht das -p
Flag, also ist es kompatibel mit dem Windows mkdir
, aber in Ihrem Fall wird -p
nicht von der nativen Windows-Shell unterstützt, so dass Sie entweder eine leistungsfähigere Shell (sh
) oder verwenden müssen siehe # 1.
3) durch die make
Quellcode lesen und sehen, ob es zu diesem Verhalten aus irgendeinem Grund ist, oder wenn es ein Bug. Ich habe das Handbuch durchsucht, und ich glaube nicht, dass die Art, wie Sie Ihren Befehl an die Shell senden oder ihn öffnen, als ein Prozess dokumentiert ist.
Bitte beschreiben Sie genauer, was „nicht funktioniert“. Das heißt, beschreiben Sie das erwartete Verhalten und das tatsächliche Verhalten. Bitte verwenden Sie auch keine Bilder für Text. Kopieren Sie den Text direkt als Text in die Frage. – kaylum
'mkdir -p' ist ein U \ * x-Befehl. Es sei denn, Sie irgendeine Art von U \ * x Userland haben (Cygwin, Bash, usw.) es wird einfach nicht funktionieren, so wie 'cmd/c beginnen notepad.exe' ist unwahrscheinlich, etwas Sinnvolles auf Nicht-Windows-Plattformen zu tun. – tripleee
kaylum. es funktioniert nicht, machen Sie es zu einem Fehler und hört dort auf. –