【发布时间】:2016-04-07 12:21:50
【问题描述】:
我正在用 C++ 编写 Python 扩展。我通过在 setup.py 文件中定义组成源文件的列表来编译它,如下所示:
extensions = {
'im': [
"im/src/buffer.cpp",
"im/src/detail.cpp",
"im/src/gil.cpp",
"im/src/halideimage.cpp",
"im/src/hybrid.cpp",
"im/src/hybridimage.cpp",
"im/src/options.cpp",
"im/src/pybuffer.cpp",
"im/src/pycapsule.cpp",
"im/src/structcode.cpp",
"im/src/typecode.cpp",
"im/src/module.cpp"
],
}
...这些用于定义setuptools.Extension 的实例,最终传递给setup() 函数。这在整个项目中都运行良好,直到现在,当我尝试添加一个特定于平台的位时:
preview_source = (sys.platform == 'darwin') and 'im/src/plat/preview_mac.mm' or \
(sys.platform == 'linux') and 'im/src/plat/preview_linux.cpp' or \
(sys.platform == 'win32') and 'im/src/plat/preview_windows.cpp' or \
'im/src/plat/preview.cpp'
extensions = {
'im': [
"im/src/buffer.cpp",
"im/src/detail.cpp",
"im/src/gil.cpp",
"im/src/halideimage.cpp",
"im/src/hybrid.cpp",
"im/src/hybridimage.cpp",
"im/src/options.cpp",
preview_source,
"im/src/pybuffer.cpp",
"im/src/pycapsule.cpp",
"im/src/structcode.cpp",
"im/src/typecode.cpp",
"im/src/module.cpp"
],
}
... 添加这个新位会选择正确的文件进行编译——但它在 Mac OS X 上根本无法编译。显然distutils/setuptools 无法将“.mm”扩展名识别为源文件:
错误:未知文件类型“.mm”
对于distutils 和setuptools 特定于平台的配置,我不是专家——有什么简单的方法可以有条件地将这个源文件添加到 Mac 上的源文件列表中?
【问题讨论】:
标签: python setuptools objective-c++ distutils python-c-api