繁体   English   中英

swig 模板文件可以知道它是为 python2(“swig -python”)还是 python3(“swig -python -py3”)编译的吗?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM