Fügen Sie eine permanente Compileroption zu g ++ hinzu

2517
milan-j

Ich verwende einen g ++ 4.7 auf Ubuntu 12.04, um meinen C ++ - Code zu kompilieren. Er wird nicht kompiliert, es sei denn, die Option -std = gnu ++ 11 wird meinem Befehl folgendermaßen hinzugefügt:

g++ -std=gnu++11 main.cpp 

Gibt es eine Möglichkeit, diese Option dauerhaft zum Compiler hinzuzufügen, da mein Texteditor g ++ zum automatischen Kompilieren meines Codes verwendet, und das nicht funktioniert, weil ich diese Option hinzufügen muss und ich sie nicht hinzufügen kann, wie ich es normalerweise von innen tun kann des Terminals?

Ich habe gesehen, dass Leute eine Spezifikationsdatei verwenden, um g ++ zu konfigurieren, aber ich verstehe nicht, wie man das macht, also wird die Hilfe von euch sehr geschätzt.

2
Spezifikationsdatei? Dies könnte [[make]] (https://en.wikipedia.org/wiki/Make_%28software%29) mit einem [Makefile] (https://en.wikipedia.org/wiki/Make_%28software%29) sein #Makefiles). Ein Makefile ist eine schrecklich verschlungene Sache, die ich nicht verstehe, obwohl manche Leute dies irgendwie tun. Bob vor 11 Jahren 0
@ Bob: Ein Makefile ist eine ziemlich einfache Sache, die leicht zu verstehen ist, sobald man die Vorstellung bekommt, dass es funktional ist und nicht prozedural. Es ist auch sehr hilfreich bei jeder Art von Entwicklung. Ich habe darüber ein [Tutorial] (http://wiki.osdev.org/Makefile) geschrieben, das für Sie hilfreich sein könnte ... DevSolar vor 11 Jahren 0
@DevSolar Ja, ich habe dort irgendwie gescherzt. Ich persönlich hatte noch nie einen Grund, etwas über sie zu erfahren (IDEs!: D), aber die Leute, die sich die Mühe machen, können es wahrscheinlich ziemlich schnell aufgreifen. Bob vor 11 Jahren 0
Beachten Sie, dass die Spezifikationsdatei und das Makefile fast völlig unabhängig voneinander sind: Während die erste eine Compiler-Konfigurationsdatei ist, die normalerweise mit Ihrem Compiler geliefert wird, ist die letztere eine Buildanweisungsdatei, die mit Ihrem Projekt geliefert wird. Für letzteres würde normalerweise "export CXXFLAGS = -std = gnu ++ 11" ausreichen, aber ich glaube, das ist nicht die Frage, die hier zur Verfügung steht. MvG vor 11 Jahren 1

1 Antwort auf die Frage

1
MvG

Ich würde einfach ein Shellskript erstellen, ~/bin/g++das die Zeilen enthält

#!/bin/sh exec /usr/bin/g++ -std=gnu++11 "$@" 

und stellen Sie sicher, dass ~/bines sich auf der PATH, und dort vor jedem anderen Verzeichnis befindet, das eine g++ausführbare Datei enthält (normalerweise die /usr/bin). Das Bearbeiten der Spec-Dateien ist möglich. Damit Ihre Einstellungen jedoch zur Standardeinstellung werden, müssen Sie die Standardspezifikationen ändern. Das bedeutet, dass Sie Root-Zugriff benötigen und mit den gcc-Interna basteln müssen. Es besteht eine gute Chance, dass dieses Basteln beim nächsten Upgrade von g ++ rückgängig gemacht wird.

Dies erfordert auch, dass "~ / bin" zuerst in "$ PATH" steht, zumindest vor dem Verzeichnis, in dem sich das echte g ++ befindet. Ich würde stattdessen `alias g ++ = 'g ++ --std = gnu ++ 11'` vorschlagen. ott-- vor 11 Jahren 5
@ott, Alias ​​ist für die Verwendung der interaktiven Befehlszeile in Ordnung, hat aber normalerweise keinen Einfluss auf einen Befehl, der von einem Editor aufgerufen wird, da OP dies erfordert. MvG vor 11 Jahren 0
Ok, aus einem Editor heraus ist das Skript der richtige Weg. ott-- vor 11 Jahren 0
Wie @ott richtig angegeben hat, muss Ihr Verzeichnis vor den etablierten stehen. Frage bearbeitet Beachten Sie auch, dass sich das `~` in meiner Antwort auf Ihr Home-Verzeichnis bezieht. Schreiben Sie also: export PATH = $ / bin: $ `. Persönliche Dinge in `/ bin` zu packen ist eine schlechte Idee und sollte root-Zugriff haben, was meine Antwort als überflüssig erachtet. MvG vor 11 Jahren 0