Forum: Compiler & IDEs Probleme mit gcc -MM im Makefile


von Andreas Schmidt (Gast)


Lesenswert?

Hallo Zusammen,

Ich habe hier ein komisches Phänomen das ich mir nicht erklären kann. In 
meinem Makefile steht folgende Zeile:


dep: $(COMMON_SRCS) $(SAM7_SRCS)
    $(CC) $(INC_FLAGS) -MM $^ > $@


Diese liefert mir auf der Eclipse-Console folgenden Output:


make ROOT_DIR=C:/RoboCar/testWorkspace/RoboCar dep
arm-elf-gcc -I. -I../common/include  -MM ../common/croutine.c 
../common/list.c ../common/queue.c ../common/tasks.c 
../common/portable/heap_1.c port.c portISR.c startup.c syscalls.c > dep
arm-elf-gcc.exe: no input files
make: *** [dep] Error 1


Wenn ich nun die Zeile in einem DOS Prompt ausführe:

arm-elf-gcc -I. -I../common/include  -MM ../common/croutine.c 
../common/list.c ../common/queue.c ../common/tasks.c 
../common/portable/heap_1.c port.c portISR.c startup.c syscalls.c > dep


bekomme ich in der Datei dep das richtige Ergebnis.


Dachte erst, es liegt an dem Umleitungsoperator, denn wenn ich die 
Umleitung weg lasse, so bekomme ich die Depencies in der Eclipse Console 
angezeigt. Aber der Aufruf

echo "Testoutput" > test.txt


im Makefile funktioniert. Nur der gcc Aufruf macht Probleme?


Übersehe ich etwas?
Ich bin für jeden Tip sehr dankbar!!!

Gruß
Andy

von ... (Gast)


Lesenswert?

Sieht so aus, als ob Du im falschen Verzeichnis bist.

von Andreas Schmidt (Gast)


Lesenswert?

Das glaube ich nicht. Ich habe gerade versucht, den Make-Aufruf über das 
DOS Prompt aus dem richtigen Verzeichnis aus aufzurufen. Gleiches 
ergebnis. Und wie gesagt, wenn ich den gcc Befehl direkt ausführe, dann 
funktioniert alles nur im Makefile nicht.

von Klaus F. (kfalser)


Lesenswert?

Andreas Schmidt schrieb:
> Das glaube ich nicht.

Das glaube ich doch. Das Makefile wechselt in ein anderes Verzeichnis, 
wahrscheinlich hat es mit der übergebenen ROOT_DIR Variable zu tun die 
auf C:/RoboCar/testWorkspace/RoboCar gesetzt wird.

Ändere einmal das Makefile auf

dep: $(COMMON_SRCS) $(SAM7_SRCS)
    dir
    $(CC) $(INC_FLAGS) -MM $^ > $@

dann wird das Verzeichnis gelistet und Du siehst wo du bist.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Dann müsste der Compiler aber was erzählen von "File not found" oder
so, und nicht "No input files".

Klingt irgendwie danach, als würde make bei der Übergabe der
Kommandoparameter irgendwo die Zeile abschneiden.  Ist es sicher,
dass das richtige make aufgerufen wird?

von Andreas Schmidt (Gast)


Lesenswert?

Das hatte ich auch schon probiert. Aber ich bekomme dann die 
Fehlermeldung, dass der Prozess dir nicht gefunden wurde.

Was mich aber verwundert ist, dass wenn ich die Umleitung in eine Datei 
des Aufrufs $(CC) -MM weglasse, dass dann der Aufruf korrekt ausgeführt 
wird und die Depencies auf der Konsole angezeigt werden.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Das deutet eben alles auf eine Macke der Shell (Kommandoprozessor) hin,
die da aufgerufen wird, um das Kommando auszuführen.

von Andreas Schmidt (Gast)


Lesenswert?

@Jörg: Ich habe nur ein make installiert welches auch im Path ist. In 
dem Test-Projekt gibt es im gesamten Verzeichnisbaum nur ein Makefile.

Wenn ich die Konsolen-Ausgabe von dem Make Aufruf anschaue, dann wird 
(zumindest bei der Anzeige auf der Konsole) nichts abgeschnitten.

Ich habe so die Vermutung, dass es irgendetwas mit der Umleitung > $@ zu 
tun haben muss.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Andreas Schmidt schrieb:
> Wenn ich die Konsolen-Ausgabe von dem Make Aufruf anschaue, dann wird
> (zumindest bei der Anzeige auf der Konsole) nichts abgeschnitten.

Ja, aber die gibt ja das make selbst noch aus.  Offenbar kommt es
aber in dieser Form nicht mehr beim GCC an.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.