2009-11-04 6 views
17

Ich schreibe eine Python-Erweiterung in C, die das CoreFoundation-Framework (unter anderem) erfordert. Dies kompiliert fein mit:Wie übergeben Sie Flag in GCC in Python setup.py Skript?

gcc -o foo foo.c -framework CoreFoundation -framework Python 

(„-Framework“ ist ein Apple-nur gcc Erweiterung, aber das ist okay, weil ich ihre spezifischen Rahmenbedingungen ohnehin bin mit)

Wie kann ich feststellen setup.py zu Übergeben Sie dieses Flag an gcc?

Ich versuchte dies, aber es scheint nicht zu funktionieren (es kompiliert, aber klagt dann undefinierter Symbole, wenn ich versuche, es zu laufen):

from distutils.core import setup, Extension 
setup(name='foo', 
     version='1.0', 
     author='Me', 
     ext_modules=[Extension('foo', 
          ['foo.c'], 
          extra_compile_args=['-framework CoreFoundation'])]) 

Edit:

Diese scheint zu funktionieren:

from distutils.core import setup, Extension 
setup(name='foo', 
     version='1.0', 
     author='Me', 
     ext_modules=[Extension('foo', 
          ['foo.c'], 
          extra_link_args=['-framework', 'CoreFoundation'])]) 

Antwort

14

Vielleicht brauchen Sie extra_link_args auch einstellen? extra_compile_args wird beim Kompilieren des Quellcodes verwendet, extra_link_args beim Verknüpfen des Ergebnisses.

+0

Danke, aber ich habe das versucht und das gleiche Problem bekommen. – Michael

+0

Entschuldigung; Nach dem Löschen des "Build" -Verzeichnisses scheint es zu funktionieren. Vielen Dank! – Michael

+2

Nachdem ich das gefunden hatte, fand ich die Liste der verfügbaren Argumente hilfreich. http://docs.python.org/distutils/apiref.html?highlight=extension#distutils.core.Extension Danke, dass Sie mich in die richtige Richtung weisen. – Joel