CMake是否支持Python3?

时间:2013-07-17 08:26:42

标签: python python-3.x cmake swig

我无法通过CMake和Swig for Python3为我的C库构建Python包装器模块。一切都适用于Python2.x但看起来CMake找不到Python3。我已经环顾四周,尝试了几件事。

例如,我的python可执行文件链接到Python3,因为我读过CMake会先找到这个版本。

请在此处查看CMakeLists.txt的SWIG部分:

FIND_PACKAGE(SWIG REQUIRED)
INCLUDE(${SWIG_USE_FILE})

FIND_PACKAGE(PythonInterp 3)
FIND_PACKAGE(PythonLibs 3)

FIND_PATH(PYTHON_INCLUDE_PATH Python.h
  /usr/include
  /usr/local/include)
INCLUDE_DIRECTORIES(${PYTHON_INCLUDE_DIRS})

INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR})

SET(CMAKE_SWIG_FLAGS "")

SET_SOURCE_FILES_PROPERTIES(kissCT3.i PROPERTIES CPLUSPLUS ON)
#SET_SOURCE_FILES_PROPERTIES(kissCT3.i PROPERTIES SWIG_FLAGS "-includeall -py3")

SWIG_ADD_MODULE(kissCT3 python kissCT3.i)
SWIG_LINK_LIBRARIES(kissCT3 libct2d matio kissfft ${PYTHON_LIBRARIES})

不幸的是,调用cmake后的输出显示只找到了python2.7:

-- Found SWIG: /usr/bin/swig2.0 (found version "2.0.4")
-- Found PythonInterp: /usr/bin/python2.7 (Required is at least version "3")
-- Found PythonLibs: /usr/lib/libpython2.7.so (Required is at least version "3")
-- Configuring done
-- Generating done

4 个答案:

答案 0 :(得分:9)

你能确保你的构建目录是干净的吗?我有完全相同的问题,在清理了目录后,它有效。

答案 1 :(得分:4)

CMake 3.12应该可以帮助您解决问题。引用发行说明:

  

新的“FindPython3”和“FindPython2”模块,以及新的模块   “FindPython”模块,已被添加,以提供一种新的定位方式   python环境。

答案 2 :(得分:1)

我通过手动设置python版本解决了这个问题。这不是真的值得推荐,但现在可以使用(请注意,您必须使用自己想要使用的python版本的安装路径):

SET(PYTHON_INCLUDE_PATH /usr/include/python3.2mu)
SET(PYTHON_LIBRARIES /usr/lib/libpython3.2mu.so)
SET(PYTHON_EXECUTABLE /usr/bin/python3.2mu)
SET(PYTHON_INCLUDE_DIR  /usr/include/python3.2mu)

答案 3 :(得分:0)

这是一个众所周知的错误,但不幸的是,目前尚未解决,请参阅http://www.cmake.org/Bug/print_bug_page.php?bug_id=13794