Alias ​​gcc = 'gcc -fpermissive' oder Ändern des ./configure-Skripts

6116
robo

Ich kompiliere ein ziemlich großes Projekt von der Quelle. Die Kompilierung endet immer mit: error: Ungültige Konvertierung von 'const char *' nach 'char *' [-fpermissive]

Ich habe dieses Projekt bereits vor einem Jahr zusammengestellt. Ich kenne eine Lösung dafür. Tatsächlich habe ich mehr Lösungen gefunden:

  1. Hinzufügen einer Typumwandlung zur entsprechenden Zeile des CPP-Codes (Es gab unendlich viele Änderungen in jeder Datei. Ich fand die nächste Lösung.)
  2. Ändern eines Makefiles zum Kompilieren dieser Datei mit der Option -fpermissive (Ich musste in jedem Makefile viele Zeilen ändern. Daher finde ich eine noch bessere Lösung.)
  3. "g ++" oder "gcc" wurde in einer Variablen gespeichert, daher fügte ich diesen Variablen -fpermissive hinzu.

Dies ist die beste Lösung, die ich habe. Es reicht aus, diese Option einmal zu jedem Makefile hinzuzufügen. Leider hat diese Software eine große Anzahl von Unterverzeichnissen. Ich muss also mehr als 100 Makefiles ändern. Ich habe vor einem Jahr den ganzen Tag gebraucht.

Gibt es einen Weg, wie dies schneller geht?

Was ist damit? alias gcc = 'gcc -fpermissive' Ich bin mit Aliasnamen nicht vertraut. Es sollte jedoch leicht sein, dies zu versuchen. Ist die Syntax korrekt? Und ist das richtig? Alias ​​g ++ = 'g ++ - fpermissive'? Und muss ich den Alias ​​irgendwie exportieren? Wird das Make-Programm den Alias ​​respektieren?

Soll ich vielleicht das ./configure-Skript ändern? Oder die ./configure.in? Oder eine andere Datei?

2

2 Antworten auf die Frage

2
terdon

Aliase lassen sich am einfachsten einrichten, indem Sie die entsprechende Zeile in Ihre ~/.bashrcDatei einfügen. Wenn Sie einen Befehl absetzen, sucht BASH $PATHnach der ersten Instanz einer ausführbaren Datei mit diesem Namen. Aliase in Ihrer ~/.bashrcDatei werden immer zuerst gefunden. Wenn Sie einen Alias ​​mit demselben Namen wie ein tatsächlicher Befehl haben (z. B. gcc), wird der Alias ​​ausgeführt.

Fügen Sie also in Ihrem Fall diese Zeilen hinzu ~/.bashrc(ja, die Syntax ist korrekt):

alias gcc='gcc -fpermissive' alias g++='g++ -fpermissive' 

Alternativ können Sie verschiedene Aliase erstellen, sodass Sie auswählen können, ob Sie das -fpermissiveFlag verwenden möchten oder nicht.

alias gcc_per='gcc -fpermissive' alias g++_per='g++ -fpermissive' 

Auf diese Weise können Sie nach Ihren Bedürfnissen gccausführen /usr/bin/gccoder gcc_perausführen /usr/bin/gcc -fpermissive. Natürlich können Sie den Alias ​​beliebig einstellen, der Name liegt bei Ihnen.

Wenn Sie die relevanten Zeilen zu Ihrem hinzugefügt haben, geben Sie ~/.bashrcentweder Source ( source ~/.bashrc) ein oder öffnen Sie einfach ein neues Terminal, und Ihre neuen Aliasnamen sind eingerichtet und einsatzbereit.

Soweit ich das beurteilen kann, wird "make" den Alias ​​jedoch nicht respektieren. Jonas vor 8 Jahren 0
2
Jonas

Alte Frage, ich weiß, aber zur zukünftigen Referenz:

Aliasing gccund g++im .bashrcWillen funktionieren nicht innerhalb make. Sie können jedoch makedie Variablen CCund CXXaus den .bashrcfolgenden Bereichen überschreiben :

export CC="gcc -fpermissive" export CXX="g++ -fpermissive" 

Das erfordert natürlich, dass Sie $(CC)und $(CXX)in expliziten Regeln in Ihrem Makefile verwenden, aber Sie sollten dies trotzdem tun. Sie werden standardmäßig in den impliziten Regeln verwendet.