Pythonlibs3 CMake 和 macOS

Pythonlibs3 CMake and macOS

[更新 2]

下面两行,添加到我的CMake文件后,成功找到了python3及其库。这仅在终端中起作用的原因是因为 CLion 使用其捆绑版本的 CMake (3.6.3),而我的终端使用的更新版本 (3.7.2) 正确找到 python.

FIND_PACKAGE(PythonInterp 3)
FIND_PACKAGE(PythonLibs 3)

[更新] 我让 cmake 文件可以工作,但是,当我从终端 运行 时,它只找到 python3 库。从 CLion 运行ning 时,出现以下错误:

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)

[原创 POST]

我正在开发一个跨平台 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 虚拟环境,然后 运行ning cmake。
  2. 正在将 set(Python_ADDITIONAL_VERSIONS 3.6) 添加到我的 cmake

其他信息:

如果我将 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 的情况下设置 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)

错误为:

Unknown CMake command "PYTHON_ADD_MODULE".

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

如上文问题更新所述,转移到 CMake 3.7.2 并使用以下两行解决了我的问题:

FIND_PACKAGE(PythonInterp 3)
FIND_PACKAGE(PythonLibs 3)

[更新] 对于任何使用 Google 测试并通过 CMake 安装它的人来说,重要的是将上述行放在 Google 测试代码之前。这是因为Googletest会找python,找到python2,那么当这两行是运行的时候,就找不到python ] 3.

如果这两行放在 Google 测试安装代码之前,那么 python3 将被找到并用于 google 测试。