Pythonlibs3 CMake 和 macOS

标签 python c++ macos cmake clion

[更新 2]

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

FIND_PACKAGE(PythonInterp 3)
FIND_PACKAGE(PythonLibs 3)

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

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 以便能够从 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 但我没有 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 路径/usr/local/Cellar/python3/3.6.0/Frameworks/Python.framework/Versions/3.6/)

它能够找到库,但随后出现错误:

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 Test 并通过 CMake 安装它的人来说,将以上几行放在 Google Test 代码之前是很重要的。这是因为谷歌测试会找python,会找python2,那么运行这两行的时候,就找不到python 3了。

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

关于Pythonlibs3 CMake 和 macOS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42445169/

相关文章:

python - 避免重复结果 多线程 Python

c++ - std::unordered_set 中的非常量 find()

C++ - 使用 vector 清理堆上类的正确方法

c++ - std::get 以元组作为成员的自己的类

ios - 无法使用免费的苹果开发者帐户下载配置文件

java和python在逻辑运算符中给出不同的结果

python - Python 中的递归列表切片

macos - OS X 上的免费 VRam

python - 如何在python中转换和减去日期,时间

android - 我无法在 eclipse 4.2.1 中配置 ADT 插件(在 Mac OS X 10.5.8 上)