Makefile-Modifikation zur Unterstützung von c++11
Ich bin in der Lage zu kompilieren einer einzelnen Datei mit gcc mit -std=c++0x-option. Aber ich kann dies nicht durch makefile. Hier sind die Gruppe von flags, die in meinem makefile (was nach machen, beschwert sich über die c++11-keywords):
MACHINE = $(shell echo `uname -s`-`uname -m` | sed "s///g")
CCC = CC
CCC = g++
CFLAGS = -O3
CFLAGS = -std=c++0x
CFLAGS = -pg -D_DEBUG -g -c -Wall
LFLAGS = -O
LFLAGS = -pg -g
Was bin ich?
Bearbeiten:
Ich habe ihn zu den folgenden, aber ich bekomme immer noch Fehler bei der Kompilierung, die ich nicht bekommen mit der Kommandozeile gcc-Aufruf.
CXXFLAGS=-O3 -std=c++0x -pg -D_DEBUG -g -c -Wall
- Sie wollen wahrscheinlich
CFLAGS += stuff
, nichtCFLAGS = stuff
. - Warum hast du mehrere CFLAGS? Warum nicht einfach "CFLAGS=-O3 -std=c++0x -pg -D_DEBUG -g -c -Wall"?
- Ich habe ihn zu den folgenden, aber ich bekomme immer noch Fehler bei der Kompilierung, die ich nicht bekommen mit der Kommandozeile gcc-Aufruf. CXXFLAGS=-O3 -std=c++0x -pg -D_DEBUG -g -c -Wand
- Was ist die Befehl-Linie, gedruckt bei g++ aufgerufen wird? Was sind die Fehler, die Sie bekommen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Diese Weise Ihre makefile verwenden Sie alle Ihre
CFLAGS
:Sind Sie überschreiben Sie mit jedem "CFLAGS=..." - Deklaration.
Außerdem sollte es
CXXFLAGS
, nichtCFLAGS
.CFLAGS
ist für C-Anwendungen.Als @Florian Sowade sagte, Sie könnte verwenden
CFLAGS += -O3 -std....
(oder CXXFLAGS..), so dass die Nutzer können eigene flags bei der Ausführung stellen.CFLAGS += ...
kann der Benutzer seine eigenen CFLAGS mitCFLAGS="..." make
CFLAGS
/CXXFLAGS
für die person, die die Anrufung machen.CXXFLAGS
! Coole Sache foncused mich in einen Zustand der foncusion #NoTypoKönnen Sie halten Sie es in mehrere Zeilen, aber Sie wahrscheinlich wollen, um Anhängen, nicht zu zuweisen:
Wo hast du das Chaos aus? Das makefile falsch war, lange bevor Sie es geändert für C++11.
Beginnen wir mit der ersten Zeile:
Versuchen, den Befehl ausführen
echo `uname -s`-`uname -m`
und Sie werden sehen, wenn keine Leerzeichen sowieso, also, was ist der Punkt in dersed
Befehl?Vielleicht möchten Sie diese:
Dass läuft nur zwei Prozesse (uname-und sed) nicht vier (zwei unames, echo und sed)
Wenn Sie GNU make sollte es
Damit es nur einmal ausgeführt.
Was ist
CC
?Oh, es spielt keine Rolle, habe Sie ersetzt den Wert sowieso.
Der konventionellen make-variable der C++ - compiler ist
CXX
Als andere haben darauf hingewiesen, setzen Sie CFLAGS, dann setzen Sie ihn auf etwas anderes, dann etwas anderes. Nur der Letzte Wert wird gehalten.
Gleiche hier, und was ist
LFLAGS
? Meinst duLDFLAGS
?Eine gute Möglichkeit zum Debuggen von makefiles zu schaffen, ist ein Ziel zum ausdrucken der Variablen, die Sie sind einstellen, um zu überprüfen, Sie haben die Werte, die Sie erwarten: