Ich entwickle seit ungefähr 10 Jahren Windows-Anwendungen in C ++. Und seit kurzem beschäftige ich mich mit einigen Linux-Projekten und ich kann es nicht ausstehen, wie unproduktiv ich bin ...
Ich lerne schnell und nutze Linux seit einiger Zeit als primäre Plattform. Und ich fühle mich sehr wohl mit Shell, Betriebssystemprinzipien und GUI. Aber wenn es um Entwicklung geht, fühle ich mich wie zurück in die Schule.
Sobald ich ein größeres Projekt öffne, stecke ich fest. Die meisten von ihnen basieren auf Makefiles. Wenn ich also versuche, sie mit QT oder CodeBlocks zu navigieren, kann ich Intellisense bestenfalls pro Datei verwenden. Und die meisten Zeitvariablen verlieren ihren Gültigkeitsbereich.
Dann gibt es eine Art von Definition, die es anscheinend nicht gibt. Versuchen Sie, sich einem größeren Projekt von SourceForge anzuschließen, und Sie stecken tagelang fest, weil das Navigieren zu Definitionen so schwierig ist ... grep -r "this_def" . --include "*.cpp" --include "*.h"
so langsam und unbeholfen erscheint.
Und dann funktioniert das Debuggen von gdb, aber egal was ich mache, es scheint, als ob es Lichtjahre hinter WinDbg oder VisualStudio Debugger liegt.
Und diese Dinge machen mich verzweifelt, ich möchte Code schreiben, aber es geht nur so langsam ... Ich fange an zu denken, dass Linux-Entwickler Funktionsdefinitionen auswendig lernen und Code mit den Augen analysieren, aber ich kann es nicht glauben so.
Hat jemand das durchgemacht? Fehlt mir etwas, das mich produktiver machen könnte?
Antworten:
Interessanterweise habe ich regelmäßig das gleiche Problem in die entgegengesetzte Richtung. Ich bin in erster Linie ein UNIX-Codierer, aber ich muss regelmäßig Dinge auf Windows portieren. Ich kann Ihnen nicht sagen, wie oft ich mir die Haare ausreißen wollte, weil ich das entsprechende Kontrollkästchen für eine Compiler-Option auf einer der 35 Seiten mit Voreinstellungen für ein Projekt nicht finden kann. Ich öffne lieber die proj-Datei und füge die XML selbst hinzu.
Wenn Sie sich in eine der beiden Richtungen bewegen, ist es das Geheimnis, Geduld zu haben und das Toolset für die Plattform zu lernen, auf der Sie arbeiten möchten alles wieder von vorn. Es gibt keine Möglichkeit, dies zu vermeiden.
In Ihrem speziellen Fall gibt es einige zusätzliche Tools, die Sie kennen sollten. Das erste ist DDD , ein GUI-Frontend für gdb. Es ist nicht so schick wie Visual Studio, aber es wird Ihre Hand halten. Ich würde jedoch wirklich empfehlen, die Kugel zu beißen und die Vor- und Nachteile von GDB zu lernen. Wenn Sie ein normaler Benutzer sind, gibt es in der Tat keinen großen Unterschied zwischen dem Speichern der zu tippenden Befehle und dem Speichern des Dialogfelds, das Sie zum Ändern einer Einstellung aufrufen müssen.
Sie müssen auch über Tools wie CScope und CTags Bescheid wissen . So sehr Sie sich auch widersetzen mögen, ich würde vorschlagen, VIM oder EMACS zu lernen . Sie lassen sich gut in die gerade erwähnten Tag-Tools integrieren. Wenn du in Rom bist, mach wie es die Römer tun. Sie finden Erweiterungen für VIM und EMACS, mit denen Sie den Code vervollständigen können. Meine eigene Erfahrung mit Tools, die Code-Vervollständigung bieten, ist, dass ja, es einige Eingaben spart, aber im Allgemeinen ist das Eingeben einfach. Denken ist das, was schwer ist. Ihre Meinung kann abweichen, insbesondere wenn Sie an einem Karpaltunnelsyndrom leiden.
Wie für machen. Make ist zugegebenermaßen schrecklich, aber wahrscheinlich musst du es einfach aufsaugen und lernen.
quelle
Unter Windows entwickeln, unter Linux bereitstellen.
Dies umfasst das Ausführen von Komponententests sowohl auf Ihrem eigenen Computer (Windows) als auch auf dem Build-Server (Linux).
Als Nebeneffekt lernen Sie, wie Sie portablen Code schreiben.
Ein weiterer positiver Effekt ist, dass die Verwendung verschiedener Compiler mehr Warnungen generiert und somit mehr Fehler aufdeckt.
UPDATE : An alle Linux-Fans, die diese Antwort abgelehnt haben: Ich sage nicht, dass jeder unter Windows entwickeln sollte! Aber mit der Plattform , die Sie sehr gut kennen , ist produktiver als eine Menge Zeit verbringen auf eine neue Plattform zu lernen.
quelle
Ihr Problem wurde in der Linux-Welt schon oft gelöst. Im Gegensatz zu den Windows / Microsoft-Tools wird es jedoch nicht auf einem silbernen Teller mit einer Beilage aus Extras weitergereicht. Möglicherweise müssen Sie etwas arbeiten, um es zu bekommen.
Ich benutze einen kommerziellen Editor (Visual Slick Edit) für dieses Problem. Eclipse mit dem CDT-Plugin ist ein Open-Source-Weg, der eine berechtigte große Fangemeinde hat. (Nicht gut für mich, da ich oft ADA-Unterstützung benötige)
Was ich nicht mache, ist zu versuchen, die Makefiles in eine Art Projekt umzuwandeln. Ich verwende die eingebauten Systeme der IDE und füge bei Bedarf manuell Dateien hinzu / entferne sie. Ich bin mir sicher, dass ich das Skript schreiben könnte, aber die Zeit ist es wahrscheinlich nicht wert. Dafür fand ich Eclipse ein bisschen weniger brauchbar als Slickedit (Das hätte sich leicht (und wahrscheinlich) geändert, seit ich das letzte Mal geschaut habe)
Linux hat eine große Auswahl an Werkzeugen, Leute, die wissen, wie gut sie mich in allen Aspekten der Bearbeitung übertreffen, Referenzen usw., nur eine steile Lernkurve. Ich bin mir sicher, dass Emacs auch alles kann, obwohl er es noch nie benutzt hat.
quelle
Für das, was es wert ist, haben Sie unter Linux bessere Build-Systeme als einfaches altes GNU-make (was oft mit der schrecklichen Autoconf einhergeht ), zum Beispiel omake und viele andere (
cmake
,scons
...).quelle
Ein Vorschlag, wie mühsam es ist, mit grep nach Code zu suchen: Richten Sie Bash-Aliase in Ihrer .bashrc-Datei ein. Dann ist es nur ein einziger Befehl:
Es gibt wahrscheinlich bessere Möglichkeiten, den Befehl zu schreiben, aber die Idee ist dieselbe. Möchten Sie den Code suchen? Schreiben Sie einen Alias namens searchCode. Denken Sie daran, dass Unix-Tools, obwohl sie langwierig und kompliziert sind, auch verwendet werden können, um Ihnen das Leben zu erleichtern.
quelle
Mein 2c als jemand, der C ++ auf beiden Plattformen entwickelt hat und beide mag.
1) Makefiles sind schmerzhaft - der beste Rat, den ich Ihnen geben kann, ist, wenn möglich, auf ein anderes Build-System zu wechseln.
2) Zum Bearbeiten und Durchsuchen von Code gibt es einige recht nützliche Tools. Sicher, sie sind nicht integriert, aber es spielt keine Rolle, wenn es darum geht, Dinge zu erledigen. vim + ctags + grep bringt Sie einfach dorthin. Natürlich gibt es auch IDEs, aber ehrlich gesagt hat mir nichts gefallen, was ich ausprobiert habe: Eclipse + CDT, KDevelop, Code :: Block. Sie können jedoch zu einem anderen Schluss kommen.
3) Halten Sie sich zum Debuggen einfach an die Befehlszeile gdb. Sicher, es ist ziemlich hinter Windbg, wenn es um Features geht, aber für die meisten Zwecke ist es in Ordnung. Die grafischen Frontends (ddd, KDbg) waren beim letzten Versuch ziemlich fehlerhaft, aber auch hier haben sich die Dinge möglicherweise geändert :)
Das Fazit lautet: Ja, Sie müssen einige Lernanstrengungen unternehmen, aber danach sind Sie genauso produktiv wie unter Windows.
quelle
gdb
von innenemacs
(unter Linux) und es hilft sehr.Zu all den anderen guten Ratschlägen, die Sie bereits erhalten haben, möchte ich ein paar Links hinzufügen, jeweils zu ack und pss .
Sie richten sich an Programmierer, die sich speziell um den Quellcode kümmern müssen und versuchen, grep zu übertreffen.
quelle
Tolle Antworten. Hinzufügen zu ihnen,
Als ich diesen Schritt machte, war der Fehler, den ich gemacht habe, der Versuch, in den Code zu springen, ohne dem GNU-Build-System die gebotene Sorgfalt zu widmen. Dieses kam zurück, um mich zu beißen, als ich Codeänderungen vornehmen wollte. Verbringen Sie ein paar Tage, um zu verstehen, wie die Tools von AutoMake / AutoConf / Make funktionieren. Danach werden Sie sehr schnell sein.
In Bezug auf Tools - Eclipse + CDT / GDB + DDD ist in der Tat ein langer Weg.
quelle
Hier einige Ratschläge, um die Arbeit zu erleichtern:
quelle