Forum: PC-Programmierung make cxxflags+=-std=c++11


von Salewski, Stefan (Gast)


Lesenswert?

Ich wundere mich gerade mal wieder etwas...

Ich hatte etwas von nullptr für C11 gelesen und in den C++ Code mal die 
Zeile

int  *pi = nullptr;

eingefügt. gcc frißt das so nicht, weil C11 nicht die Vereinstellung 
ist. Ich rufe gcc nicht direkt auf, sondern verwende make, und das 
Makefile hat derzeit auch keine C11 Verweise.

Also gebe ich die Option in der Kommandozeile an:

$ make cxxflags+=-std=c++11
compiling rcgal_apollonius.cpp
rcgal_apollonius.cpp: In function ‘VALUE ag_alloc(VALUE)’:
rcgal_apollonius.cpp:59:13: error: ‘nullptr’ was not declared in this 
scope
make: *** [rcgal_apollonius.o] Error 1
$ make cppflags+=-std=c++11
compiling rcgal_apollonius.cpp
linking shared-object rcgal_apollonius.so

cppflags sind doch die flags for den Präprozessor, und cxxflags die 
flags für den C++-Compiler. Also ich hätte das genau anders herum 
erwartet.

von Dr. Sommer (Gast)


Lesenswert?

Du schreibst ständig C11 aber meinst scheinbar C++11 ?! Da ist ein 
gewaltiger Unterschied!

Salewski, Stefan schrieb:
> cppflags sind doch die flags for den Präprozessor, und cxxflags die
> flags für den C++-Compiler.
Per Konvention, ja
> Also ich hätte das genau anders herum
> erwartet.
Da ist wohl im makefile was verkehrt. Wie das aussieht weißt nur du.

von Salewski, Stefan (Gast)


Lesenswert?

Dr. Sommer schrieb:
> Da ist wohl im makefile was verkehrt. Wie das aussieht weißt nur du.

Ja ich meine c++11, meine Flagangabe mit -std=c++11 war ja wohl 
zumindest richtig.
Ich hatte ja schon fast gedacht ich hätte mich mit cxxflags und cppflags 
vertan, oder eben dass nullptr tatsächlich vom Präprozessor verarbeitet 
wird -- was mich doch gewundert hätte.

Dass mit dem Makefile etwas falsch sein könnte, daran hatte ich eher 
nicht gedacht. Dasselbe wird mit der Anweiung "$ ruby extconfig.rb" mit 
mkmf generiert, wobei ich derzeit noch Ruby 1.9.3 verwende und auf die 
Generierung wenig Einfluss habe. Womöglich sollte ich tatsächlich mal 
auf der Ruby Mailingliste nachfragen.

von Dr. Sommer (Gast)


Lesenswert?

Salewski, Stefan schrieb:
> Dass mit dem Makefile etwas falsch sein könnte, daran hatte ich eher
> nicht gedacht.
Woran denn sonst, wenn das Compilerargument nicht beim Compiler 
ankommt... Lass dir doch mal die vollen ausgeführten Kommandos anzeigen 
und nicht nur das "Compiling ...". Schau dir das generierte makefile 
auch mal genau an welches der Flags wohin übergeben wird. Vielleicht 
verwendet das "cxxflags" gar nicht. Oder du hast angegeben dass deine 
Sourcedateien C-Dateien sind anstelle von C++-Dateien...

von Karlo (Gast)


Lesenswert?

Mach dir ein Minimalbeispiel. Also nur eine .cpp Datei mit dem 
Nullpointer Test.
Und das kompilierst du dann direkt von der Kommandozeile und gibst ihm 
die Option für den C++11 Standard mit.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.