Ich verwende GNU make, um meinen C ++ - Code zu kompilieren, und ich möchte verstehen, wie ich meine Kompilierungen anpassbar machen kann.
Ich las in verschiedenen Orten , dass CFLAGS, CCFLAGSund CXXFLAGSwerden für diesen Zweck verwendet. Wie soll ich sie verwenden? Wenn ich zusätzliche Befehlszeilenargumente für den Compiler habe, sollte ich sie anhängen CFLAGSoder voranstellen? Gibt es eine gängige Praxis?
Warum die drei verschiedenen Variablen? Ich nehme an, der C-Compiler sollte bekommen CFLAGSund CCFLAGS, während der C ++ - Compiler bekommen sollte CFLAGSund CXXFLAGS- habe ich es richtig gemacht?
Soll der menschliche Benutzer diese Variablen überhaupt setzen? Haben alle automatischen Tools ( automake, autoconfusw.) sie setzen? Das Linux-System, das ich verwenden soll, definiert keine dieser Variablen - ist das typisch?
Derzeit sieht mein Makefile so aus und ich finde es etwas schmutzig:
ifdef code_coverage
GCOV_FLAG := -fprofile-arcs -ftest-coverage
else
GCOV_FLAG :=
endif
WFLAGS := -Wall
INC_FLAGS := -Istuff -Imore_stuff -Ietc
CCFLAGSINT := -O3 $(WFLAGS) $(INC_FLAGS) $(CCFLAGS)
... (somewhere in the makefile, the command-line for compilation looks like this)
$(CC) $(CCFLAGSINT) -c $< -o $@
... (somewhere in the makefile, the command-line for linking looks like this)
$(CC) $(GCOV_FLAG) $(CCFLAGSINT) $(OBJLIST) $(LDFLAGS) -o $@
Ich bin mir ziemlich sicher, dass es hier keine Fehler gibt. Das Makefile funktioniert sehr gut. Aber gibt es etwas, das gegen Konventionen verstößt (wie CCFLAGSINT- sollte ich CCFLAGSstattdessen einfach überschreiben ? Oder CXXFLAGS? FUD!)
Entschuldigung für so viele Fragen; Sie werden natürlich nicht alle beantworten, aber ich hoffe, die Antworten helfen mir, die allgemeine Idee hinter diesen Einstellungen zu verstehen.
gccoder denclangCompilern selbst verwendet werden ?