C++ extension: Compiler Flags ausschalten

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Donnerstag 12. März 2009, 18:28

Hoi,

Ich habe innerhalb meines setup-Skripts folgende Extension definiert:

Code: Alles auswählen

from distutils.extension import Extension
ext = Extension('_my_ext',
                    sources=['ext_wrap.cxx', 'ext.cxx'],
                    language = 'c++')
So weit so gut. Was ich aber nicht abstellen kann, ist das distutils dem Compiler -Wstrict-prototypes mit auf dem Weg gibt. Das gibt bei C++ bloß eine Warnung und ist kein Fehler, aber lästig ist es dennoch und mein Code könnte jetzt eigentlich ins release, aber so will ich das niemanden kompilieren lassen, sonst kommen bloß Fragen, ob die Warnung schlimm ist.

Wie kann ich - möglichst innerhalb meines setup-Skriptes, gerne aber auch in einem gesonderten config-File - nur genau diesen Flag abschalten, ohne das die anderen Flags beeinflußt werde? Oder muß ich alle Flags explizit setzen?

Gruß,
Christian
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

Donnerstag 12. März 2009, 22:26

Probier mal

Code: Alles auswählen

from distutils.extension import Extension
ext = Extension('_my_ext',
                    sources=['ext_wrap.cxx', 'ext.cxx'],
                    language = 'c++',
                    extra_compile_args='-w')
MfG
HWK
lunar

Donnerstag 12. März 2009, 22:44

Wieso beseitigst du nicht einfach den Grund der Warnung?
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Freitag 13. März 2009, 11:28

lunar hat geschrieben:Wieso beseitigst du nicht einfach den Grund der Warnung?
Wie das gehen soll ist doch meine Frage? Der Grund für die Warnung ist das distutils dem Compiler "ungefragt" einen Flag auf den Weg gibt, den der Compiler nur für C versteht - aber nicht für C++ und meine Extension ist in C++. Dann funktioniert der Compiler zwar tadellos, informiert aber mittels einer Warnung darüber, dass er den Flag nicht versteht.

Danke, HWK, aber das funktioniert nicht. So kann ich zwar zusätzliche Flags definieren, aber keine wegnehmen. Und auch wenn ich alle Flags, bis auf den fraglichen so übergeben, wird der Compiler immer noch mit -Wstrict-prototypes aufgerufen.

Was ich nicht verstehe: Der Flag steht nicht explizit in distutils (ich nutze gerade python 2.5.2) - so weit ich sehe. Und er ist auf meinem System nicht definiert - eigentlich definiere ich Compilerflags überhaupt ausschließlich in makefiles. Aber hier will ich ja auf distutils zurückgreifen und das macht mich nicht glücklich :(.

Aber vielen Dank - ich werde weiter recherchieren.

Gruß,
Christian
lunar

Freitag 13. März 2009, 11:53

Oh, sorry, ich habe dich falsch verstanden. Ich dachte, du würdest aufgrund dieser Option eine Warnung bezüglich deines Quellcodes erhalten. In diesem Fall hätte man die Ursache ja durch Anpassen der Quellen beseitigen können.
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

Samstag 14. März 2009, 15:47

CM hat geschrieben:Danke, HWK, aber das funktioniert nicht. So kann ich zwar zusätzliche Flags definieren, aber keine wegnehmen. Und auch wenn ich alle Flags, bis auf den fraglichen so übergeben, wird der Compiler immer noch mit -Wstrict-prototypes aufgerufen.
Laut GCC-Manual sollten mit der Option -w (kleines w!) alle Warnungen unterdrückt werden. Geht das nicht?
MfG
HWK
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Samstag 14. März 2009, 17:47

Nein, weil der Flag an alle anderen drangehangen wird. Und dann sind alle -W-Flags bereits vom Compiler erkannt.

Im Übrigen ergibt die Übergabe eines strings an extra_compile_args einen TypeError. Was man übergeben muß ist stattdessen eine Liste von Strings. Aber das ist nebensächlich. Ich frage mich allerdings, ob das ein Bug in der distutils-Dokumentation ist, bzw. eine Uneindeutigkeit.

Gruß,
Christian
Antworten