2017-02-24 60 views
3

[更新2]Pythonlibs3 CMake和macOS

以下两行添加到我的CMake文件,成功找到python 3及其库。这只是在终端工作的原因是因为CLion使用其捆绑版本的CMake(3.6.3),我的终端正在使用的更新版本(3.7.2)正确地找到了python。

FIND_PACKAGE(PythonInterp 3) 
FIND_PACKAGE(PythonLibs 3) 

[更新]我得到了cmake的文件工作,但是,只有当我从终端运行发现python3库。当从克利翁运行,我收到以下错误:

CMake Error: The following variables are used in this project, but they are set to NOTFOUND. Please set them or make sure they are set and tested correctly in the CMake files: PYTHON_LIBRARY (ADVANCED)

[原帖]

我开发一个跨平台的C++应用程序和使用PythonLibs 3 boost_python一起能够调用从蟒蛇C++方法。在ubuntu上这工作正常,但是,在macOS上,我似乎无法让cmake识别pythonlibs3。

在Ubuntu上以下行的工作:

FIND_PACKAGE(PythonLibs 3 REQUIRED) 

然而,在MacOS,它只能罚款pythonlibs 2.7.10在/usr/libs/

我曾尝试以下:

  1. 使用一个python3虚拟环境,然后运行cmake。
  2. 加入set(Python_ADDITIONAL_VERSIONS 3.6)我的cmake

其他信息:

  • 我安装了BREW python3(3.6),它是位于/ usr/local/bin目录
  • 我使用cmake版本3.6.3
  • 当我写FIND_PACKAGE(PythonInterp 3) cmake能够找到我的python3安装。
  • 当检查我的/usr/lib/文件夹时,发现libpython2.7.dylib,但我没有/usr/lib//usr/local/lib/中的libpython3.6/dylib。这似乎是因为这个文件位于/usr/local/Cellar/python3/3.6.0/Frameworks/Python.framework/Versions/3.6/lib

如果我添加libpython3的位置。6我find_package,

FIND_PACKAGE(PythonLibs 3 PATHS /usr/local/Cellar/python3/3.6.0/Frameworks/Python.framework/Versions/3.6/ REQUIRED)

它是能够找到库,但后来我得到的错误:

Could not find a package configuration file provided by "PythonLibs"
(requested version 3) with any of the following names:

PythonLibsConfig.cmake 
pythonlibs-config.cmake 

Add the installation prefix of "PythonLibs" to CMAKE_PREFIX_PATH or set "PythonLibs_DIR" to a directory containing one of the above files. If "PythonLibs" provides a separate development package or SDK, be sure it has been installed.

此外,如果我尝试设置蟒蛇变量不使用find_package,它能够找到库:

SET(PYTHON_INCLUDE_PATH /usr/local/include/python3.6mu) SET(PYTHON_EXECUTABLE /usr/local/bin/python3.6mu) SET(PYTHON_INCLUDE_DIR /usr/local/include/python3.6mu) SET(PYTHON_LIBRARIES /usr/local/Cellar/python3/3.6.0/Frameworks/Python.framework/Versions/3.6/lib/)

,但后来在我的cmake我上FOLL错误亏欠的线:

PYTHON_ADD_MODULE(${PYRITMO_LIB} src/pythonwrappers.cpp)

错误读取:

Unknown CMake command "PYTHON_ADD_MODULE".

似乎因为这个功能是通过由find_package(Pythonlibs)加载的,因此,如果这不是FindPythonLibs.cmake提供这样做的原因用于定位PythonLibs,这个函数不能被调用。

回答

3

由于在更新的问题如上所述,移动到CMake的3.7.2,并使用以下两行固定我的问题:

FIND_PACKAGE(PythonInterp 3) 
FIND_PACKAGE(PythonLibs 3) 

[更新]对于使用谷歌测试的人,并通过CMake的安装它,将上面的行放在Google测试代码之前非常重要。这是因为Google测试会查找python,并找到python2,然后当这两行运行时,它们将无法找到python 3.

如果这两行放在Google Test安装代码之前,那么python3将被发现并用于谷歌测试。