Pythonlibs3 CMake和macOS

Con*_*nor 4 c++ python macos cmake clion

[更新2]

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

FIND_PACKAGE(PythonInterp 3)
FIND_PACKAGE(PythonLibs 3)
Run Code Online (Sandbox Code Playgroud)

[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)
Run Code Online (Sandbox Code Playgroud)

但是,在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但是我没有libpython3.6/dylib,/usr/lib/或者/usr/local/lib/.这似乎是因为找到了这个文件/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
Run Code Online (Sandbox Code Playgroud)

将"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,则无法调用此函数.

Con*_*nor 6

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

FIND_PACKAGE(PythonInterp 3)
FIND_PACKAGE(PythonLibs 3)
Run Code Online (Sandbox Code Playgroud)

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

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