以下两行添加到我的CMake文件,成功找到python 3及其库。这只是在终端工作的原因是因为CLion使用其捆绑版本的CMake(3.6.3),我的终端正在使用的更新版本(3.7.2)正确地找到了python。
FIND_PACKAGE(PythonInterp 3)
FIND_PACKAGE(PythonLibs 3)
[更新]我得到了cmake的文件工作,但是,只有当我从终端运行发现python3库。当从克利翁运行,我收到以下错误:
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一起能够调用从蟒蛇C++方法。在ubuntu上这工作正常,但是,在macOS上,我似乎无法让cmake识别pythonlibs3。
在Ubuntu上以下行的工作:
FIND_PACKAGE(PythonLibs 3 REQUIRED)
然而,在MacOS,它只能罚款pythonlibs 2.7.10在/usr/libs/
我曾尝试以下:
- 使用一个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
,但我没有/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)
它是能够找到库,但后来我得到的错误:
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,它能够找到库:
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我上FOLL错误亏欠的线:
PYTHON_ADD_MODULE(${PYRITMO_LIB} src/pythonwrappers.cpp)
错误读取:
Unknown CMake command "PYTHON_ADD_MODULE".
似乎因为这个功能是通过由find_package(Pythonlibs)
加载的,因此,如果这不是FindPythonLibs.cmake
提供这样做的原因用于定位PythonLibs,这个函数不能被调用。