Seite 1 von 1

C++ extension: Compiler Flags ausschalten

Verfasst: Donnerstag 12. März 2009, 18:28
von CM
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

Verfasst: Donnerstag 12. März 2009, 22:26
von HWK
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

Verfasst: Donnerstag 12. März 2009, 22:44
von lunar
Wieso beseitigst du nicht einfach den Grund der Warnung?

Verfasst: Freitag 13. März 2009, 11:28
von CM
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

Verfasst: Freitag 13. März 2009, 11:53
von lunar
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.

Verfasst: Samstag 14. März 2009, 15:47
von HWK
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

Verfasst: Samstag 14. März 2009, 17:47
von CM
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