3

Cython pxdからcコードに条件付きでコンパイル(または生成)しようとしています。DEFでaa値を定義し、IFでその値に基づいて条件付きで生成できることを読みましたが、pxdファイルの外部からこの値を取得するにはどうすればよいですか?

特に、これら2つのケースは私にとって興味深いものです。

  • できればCython.Distutilssetuptoolsの方法で、Cythonにコマンドライン定義を指定します
  • 外部化されたCヘッダーファイルはいくつかの値を定義し、この値に基づいてCythonを使用して条件付きで定義します(おそらく今は不可能ですか?)

ありがとうございました

4

2 に答える 2

13

pxiファイルを生成し、IFを実行する前にそれを含めることができます(./configureがconfig.hを生成するのと同じです)。これは、Kivysetup.pyで行うことです。例:

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)))

そして、あなたのpxdで:

include "config.pxi"
IF USE_OPENGL_DEBUG == 1:
  # do other import or whatever you want
于 2011-03-02T00:17:53.010 に答える
3

実際には、2番目のオプションの方が簡単です。いくつかの.hファイルにFLAGを作成してから、

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

それを使いたいときは、

if FLAG:
    ...

Cythonがコードを生成しますが、Cコンパイラは、コンパイル時にFLAGの値を認識しているため、これを自動的に削除します。

于 2011-03-09T01:41:56.363 に答える