[更新 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
我尝试了以下方法:
- 使用 python3 虚拟环境,然后运行 cmake。
- 将
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/