繁体   English   中英

Pythonlibs3 CMake和macOS

[英]Pythonlibs3 CMake and macOS

[更新2]

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

FIND_PACKAGE(PythonInterp 3)
FIND_PACKAGE(PythonLibs 3)

[UPDATE]我得到了cmake文件,但是,当我从终端运行时它只找到python3库。 从CLion运行时,我收到以下错误:

CMake错误:此项目中使用以下变量,但它们设置为NOTFOUND。 请设置它们或确保它们在CMake文件中正确设置和测试:PYTHON_LIBRARY(ADVANCED)

[原始帖子]

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

在ubuntu上,以下行有效:

FIND_PACKAGE(PythonLibs 3 REQUIRED)

但是,在macOS上,它只能在/usr/libs/ pythonlibs 2.7.10。

我尝试过以下方法:

  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)

它能够找到库但我得到错误:

找不到“PythonLibs”提供的包配置文件
(请求的版本3)具有以下任何名称:

 PythonLibsConfig.cmake pythonlibs-config.cmake 

将“PythonLibs”的安装前缀添加到CMAKE_PREFIX_PATH或将“PythonLibs_DIR”设置为包含上述文件之一的目录。 如果“PythonLibs”提供单独的开发包或SDK,请确保它已安装。

另外,如果我尝试在不使用find_package的情况下设置python变量,它可以找到库:

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中出现了以下错误:

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

错误如下:

未知的CMake命令“PYTHON_ADD_MODULE”。

原因似乎是因为此函数由FindPythonLibs.cmake提供,它由find_package(Pythonlibs)加载,因此,如果不使用它来定位PythonLibs,则无法调用此函数。

如上所述,在问题更新中,转到CMake 3.7.2并使用以下两行修复了我的问题:

FIND_PACKAGE(PythonInterp 3)
FIND_PACKAGE(PythonLibs 3)

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

如果这两行放在Google Test安装代码之前,则会找到python3并用于google测试。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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