Domanda

provo a compilare in modo condizionale (o generare) per il codice C da un PXD Cython. Ho letto che posso DEF per definire aa valore e IF per condizionatamente generano in base al suo valore, ma come posso ottenere questo valore per ottenere al di fuori del file PXD?

In particolare questi due casi sono interessanti per me, ora:

  • dare qualche riga di comando definiscono a Cython, preferibilmente attraverso modo in cui i Cython.Distutils setuptools
  • il file di intestazione C extern-ed definisce un certo valore, e condizionatamente definire usando Cython sulla base di questo valore (forse impossibile ora?)

Grazie

È stato utile?

Soluzione

Si potrebbe generare un file PXI, e includerlo prima di fare la vostra IF (stesso di ./configure generare un config.h troppo.) Questo è ciò che facciamo in Kivy setup.py per esempio:

c_options = { 
'use_opengl_es2': True,
'use_opengl_debug': False,
'use_glew': False,
'use_mesagl': False}

print 'Generate config.pxi'
with open(join(dirname(__file__), 'kivy', 'graphics', 'config.pxi'), 'w') as fd:
    for k, v in c_options.iteritems():
        fd.write('DEF %s = %d\n' % (k.upper(), int(v)))

E poi, nel vostro PXD:

include "config.pxi"
IF USE_OPENGL_DEBUG == 1:
  # do other import or whatever you want

Altri suggerimenti

In realtà, la seconda opzione è più facile. Creare un FLAG in qualche file h e poi fare

cdef extern from "header.h":
    cdef int FLAG

poi quando si desidera utilizzarlo, basta scrivere

if FLAG:
    ...

e anche se Cython genererà il codice, il compilatore C taglierà automaticamente questa via come si conosce il valore della FLAG in fase di compilazione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top