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

2

Ich kompiliere ein ziemlich großes Projekt aus dem Quellcode. 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 also 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 endlose Änderungen in jeder Datei. Also habe ich die nächste Lösung gefunden.)
  2. Ändern eines Makefiles, um diese Datei mit der Option -fpermissive zu kompilieren. (Ich musste viele Zeilen in jedem Makefile ändern, um eine noch bessere Lösung zu finden.)
  3. "g ++" oder "gcc" wurde in einer Variablen gespeichert, daher habe ich -fpermissive zu diesen Variablen hinzugefügt.

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 eine Möglichkeit, dies schneller zu tun?

Was ist damit? alias gcc = 'gcc -fpermissive' Ich kenne mich mit Aliasen nicht aus. Aber es sollte einfach 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?

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

Roboter
quelle

Antworten:

2

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

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

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

Alternativ können Sie verschiedene Aliase erstellen, um zu entscheiden, ob Sie die -fpermissiveFlagge verwenden möchten oder nicht :

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

Auf diese Weise können Sie entsprechend Ihren Anforderungen gccausführen /usr/bin/gccoder gcc_perausführen /usr/bin/gcc -fpermissive. Natürlich können Sie den Alias ​​so einstellen, wie Sie möchten, der Name liegt ganz bei Ihnen.

Sobald Sie die entsprechenden Zeilen zu Ihrer hinzugefügt haben, können Sie sie ~/.bashrcentweder als Quelle ( source ~/.bashrc) angeben oder einfach ein neues Terminal öffnen und die neuen Aliase sind eingerichtet und einsatzbereit.

terdon
quelle
Soweit ich das beurteilen kann, makewerde ich den Alias ​​allerdings nicht respektieren.
Jonas Greitemann
2

Alte Frage, ich weiß, aber zum späteren Nachschlagen:

Aliasing gccund g++im .bashrcWillen funktionieren nicht im Inneren make. Sie können die makeVariablen jedoch überschreiben CCund CXXaus dem .bashrc:

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

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

Jonas Greitemann
quelle