[英]Can a swig template file know whether it being compiled for python2 ("swig -python") or python3 ("swig -python -py3")?
因为 Python2 和 Python3 在字符串的外观上存在分歧,所以我必须生成略有不同的模板,具体取决于我是为 Python2 还是为 Python3 生成的。 SWIG 提供了各种宏来处理不可知格式的字符串,但不是我需要的一个特定宏。
SWIG 生成的mymod_wrap.c
包含以下形式的行:
#if PY_VERSION_HEX >= 0x03000000
我尝试将这些包含在我的模板文件中,但这不起作用。 SWIG 有自己的 C 预处理器, PY_VERSION_HEX
被该预处理器视为未定义。
作为临时解决方法,我在构建模板时将-DPYTHON=2
或-DPYTHON=3
添加到我的 SWIG 标志中。 但似乎-py3
标志本身应该能够提供某种方式让自己为人所知。 我发现有关-py3
实际功能的文档相当少。
我是否必须坚持我的解决方法,还是有更好的解决方案?
该文档提到如果设置了-py3
标志,则SWIGPYTHON_PY3
存在,但即便如此,该符号似乎也不能在模板中使用。
最后,在其中一个测试套件文件中,我发现了一段使用的代码:
#ifdef SWIGPYTHON_PY3 // set when using -py3
#define is_swig_py3 1
#else
#define is_swig_py3 0
#endif
事实证明,如果我把它放在我的模板文件的开头,我就可以使用
#if is_swig_py3
在模板内。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.