Forum: Compiler & IDEs gcc output mit sed verarbeiten


von vlad_tepesch (Gast)


Lesenswert?

Hi,
Ich will das visual studio zu coden benutzen.
soweit funktioniert alles, nervig ist allerdings, dass man mit klick auf 
die Fehlermeldung nicht an die entsprechende Codezeile kommt, da der gcc 
ein Augabefortmat hat, was das studio nicht parst:

gcc_
file:line: error:

vs:
file(line) : error

das ist so ander hab ich mir gedacht und wollte den make-output durch 
den sed jagen.

prinzipiell kein problem:
echo ../main.c:77: error: expected ';' before 'piip' | sed 
's/:\([0-9]\+\):/(\1) :/g'

ein test in der CMD zeigt, das das fnktioniert

wenn ich aber statt echo das make benutze, bleibt der putput unberührt

hat jemand ne ahnung warum?

von vlad_tepesch (Gast)


Lesenswert?

sollte natürlich heißen:
"das ist so nicht sooo anders", hab ich mir gedacht und wollte den 
make-output durch den sed jagen.

von Ahem (Gast)


Lesenswert?

Ich habe zwar Zweifel ob Du, wenn ich das richtig verstanden habe, 
Visual Studio mit gcc benutzen kannst, aber das lasse ich jetzt mal 
dahingestellt sein.

Das Problem wird sein, das gcc bzw. der Output von make nicht über 
stdout sondern etwa stderr oder einen anderen Ausgabekanal rausgeschickt 
wird. Da musst Du mal schauen, was es da für Ausgabemöglichkeiten gibt 
und das entsprechend auf dein sed umlenken.

von (prx) A. K. (prx)


Lesenswert?

bash,cmd: make 2>&1 | sed ...

von vlad_tepesch (Gast)


Lesenswert?

[quote]Das Problem wird sein, das gcc bzw. der Output von make nicht 
über
stdout sondern etwa stderr oder einen anderen Ausgabekanal rausgeschickt
wird.[/quote]

Ah, du hast recht.
wie piped man den stderr weiter?
dateiumleitung funktioniert für den error-Kanal mittels 2>
aber 2| funktioniet nicht.

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


Lesenswert?

Wenn du denn unbedingt den Berg zum Propheten verschieben musst: (*)
1
( gcc foo.c 2>&1 1>&4 | sed 's/:\([0-9][0-9]*\):/(\1) /g' ) 4>&1

Pipes kann man nur auf file descriptor 1 (stdout) aufsetzen, daher
muss man den FD 2 (stderr) auf diesen umbiegen.  Damit das
ursprüngliche stdout aber nicht durch die Pipe geht, wird es innerhalb
einer Subshell auf FD 4 gelegt, und außerhalb der Subshell (und
außerhalb der Pipe) dann wieder auf FD 1 zurück gedreht.

Allerdings erwischst du damit natürlich nur die Compilerfehler.

Außerdem kann GCC zuweilen auch noch nach der Zeilennummer die
Spaltennummer (mit einem weiteren Doppelpunkt getrennt) angeben.
Keine Ahnung, was dein Visual Affenzirkus damit dann macht...

(*) Eine vernünftige IDE kann man konfigurieren, wie die Fehlermeldungen
aussehen.

von vlad_tepesch (Gast)


Lesenswert?

@ A.K.
hab deinen Post nicht gesehen

hab auch grad
http://technet.microsoft.com/en-us/library/bb490982.aspx
gefunden, da steht genau dieseumleitung von kanal 2 auf 1

Trotzdem Danke
Es funktioniert:

make 2>&1 | sed 's/:\([0-9]\+\):/(\1) :/g'

Jörg Wunsch
>(*) Eine vernünftige IDE kann man konfigurieren, wie die Fehlermeldungen 
aussehen.

Du willst damit nicht sagen, VS sei keine vernünftige IDE, oder?
Sicher mag sie nicht perfekt sein, aber das ist wohl dennoch eine der 
ausgereiftesten, komfortablesten (und verbreitetsten) IDEs für c/c++, 
die es gibt.
Hat halt jeder seine Vorlieben.
Und besser als AVR-Studio ist sie allemal.

von Ahem (Gast)


Lesenswert?

>VS sei keine vernünftige IDE
Nun, ich pflege keine Unterhaltungen mit ihr zu führen oder ihr 
irgendwelche Urteile zu überlassen. Über ihre Vernunft kann ich also 
nichts sagen.

Aber, da VS genau auf C++ bzw, C# (kommt darauf an, von welcher Ausgabe 
wir hier reden) mit MFC, STL uswusf. ausgerichtet ist, beschränkt sich 
im Zusammenhang mit gcc die Brauchbarkeit auf Syntaxhighlighting, Sprung 
zur Fehlerstelle und einspielen in CVS, SVN uswusf.
Alles das aber kann ProgrammersNotepad genausogut.

Das kommt mir eher so vor als, wenn ich einen beliebigen Melkschemel zum 
Türdrücker umbaue. Es geht, aber ein originaler Türdrücker hätte es auch 
gleich getan.

von vlad_tepesch (Gast)


Lesenswert?

Du hast intellisense vergessen. (besonders unter c#, oder auch für c und 
c++ mit visualAssist-Plugin)
Vergleichbar gutes habe ich bisher nur in Eclipse gesehen.
Eclipse find ich aber ein wenig zu träge, weswgen ich es nur für java 
benutze (was nicht sehr häufig haißt).

von Ahem (Gast)


Lesenswert?

>Du hast intellisense vergessen. (besonders unter c#, oder auch für c und >c++ mit 
visualAssist-Plugin)
Ich habe es nicht vergessen, sondern ignoriert.
Aber gut, wenn Du das haben willst.

Und was nutzt Dir das mit gcc?

von vlad_tepesch (Gast)


Lesenswert?

Was soll der Kompiler damit zu tun haben?
Ist doch egal, ob ich den vs-compiler oder den gcc zum bauen benutze.
zum Coden kann ich doch trotzdem das studio benutzen. gerade wegen des 
intellisense, will ich das ja, weil es mich nervt jedesmal in den Head 
zu schauen, wie genau die funktion jetzt hieß und was sie für parameter 
bracuht.

Einizger nachteil ist, dass man das VS-projekt unabhängig vom Makefile 
pflegen muss, aber da ja außer am Anfang recht wenig Änderungen an der 
Projektstruktur gemacht werden, ist das auch nicht so schlimm.

Aber jetzt schluss mit dieser Sinnlos-Diskussion.
Du benutzt deinen vi, ich mein Studio und beide sind wir glücklich

von Ahem (Gast)


Lesenswert?

@  vlad_tepesch
Tut mir leid, wenn Du das als Kritik verstanden hast. So war das nicht 
gemeint und ich wollte Dich auch von nichts überzeugen. Meine Meinung 
darf ich aber sicher sagen.

Aber ich kann doch immer was dazu lernen, oder? So wie Du hier fragst, 
oder?

>Was soll der Kompiler damit zu tun haben?
Sicherlich nicht der Compiler selbst, aber die Libraries und Header 
werden ja andere sein. Der Sinn der Frage, was Dir das denn mit gcc 
nutzt, war, wie Du dem Intellisense beibringst diese zu verwenden. Ich 
räume aber ein, das ich das anders hätte formulieren können, so das man 
es nicht hätte als Ironie mißverstehen können.

von vlad_tepesch (Gast)


Angehängte Dateien:

Lesenswert?

ich wollte auch dich nicht angreifen, sondern nur verhindern das der 
glaubenskrieg, ob MS vS nun gut ist, oder nicht, aufhört.

> wie Du dem Intellisense beibringst diese zu verwenden

zum beispiel mit der angehangenen Projektdatei.

im Studio ein neues Projekt erstellen "Makefile-projekt"
da gibt man die build commands (build, clean, rebuild) an.
und für das intellisense kann man außerdem noch die includepfade (zb zu 
dem winavr/avr/include - verzeichnis) und Präprozessor-defines angeben.

schon ist das erledigt - und es programmiert sich (meiner meinung nach) 
viel entspannter. Zur Makefile-Pflege und zum simulieren (falls doch mal 
nötig) benutze ich weiterhin das AVR-Studio

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


Lesenswert?

vlad_tepesch wrote:

> Und besser als AVR-Studio ist sie allemal.

Das würde ich auch nicht freiwillig benutzen, allerdings zum Teil
natürlich schon deshalb, weil ich gar kein Windows habe.  Zum
anderen Teil finde ich es in keinerlei Hinsicht wirklich eine
tolle Umgebung.

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.