如何使用cmake链接Python3 Libs?

时间:2015-03-25 00:39:27

标签: python-3.x cmake boost-python

我通过brew install python3安装了Python3。但是,cmake找不到PythonLibs 3.这是我CMakeLists.txt的标题。

cmake_minimum_required(VERSION 3.0)
find_package(PythonLibs 3 REQUIRED)

当我运行cmake时,我收到此错误消息

Could NOT find PythonLibs: Found unsuitable version "2.7.6", but required is at least "3" (found /usr/lib/libpython2.7.dylib)

不确定我做错了什么。

3 个答案:

答案 0 :(得分:3)

根据我的经验,这是因为我使用的是较旧版本的cmake(2.8而不是3+),它们对Python 3.4一无所知(它在3.3之后放弃了。)

解决方案是进入CMakeLists.txt文件并添加一个"其他版本"指令超过find_package:

<label>

你也可以通过升级你的cmake版本来修复它。但上面的工作对我来说是cmake 2.8

答案 1 :(得分:0)

另一个原因是,当从OSX上的brew安装时,CMake无法找到Python 3。看起来CMake开发人员知道FindPythonLibs很糟糕并且有a ticket to revamp it,但它看起来不会很快发生。

我相信Python解释器本身知道它的库和头文件在哪里,所以我认为最好的办法是运行它来查找。要获取Python解释器的路径,我会强制用户手动指定它。 Python的一个重大问题是,许多软件都包含自己的副本,因此您最终会在系统上获得5个副本。拿起错误的机会太高了。让用户指定正确的。

答案 2 :(得分:0)

因为您使用的是CMake> = 3.0,所以可以find_package(Python COMPONENTS Interpreter Development)看到:https://cmake.org/cmake/help/v3.12/module/FindPython.html

例如,这将为您提供:

find_package(Python COMPONENTS Interpreter Development)

message("Python_FOUND:${Python_FOUND}")
message("Python_VERSION:${Python_VERSION}")
message("Python_Development_FOUND:${Python_Development_FOUND}")
message("Python_LIBRARIES:${Python_LIBRARIES}")

结果:

Python_FOUND:TRUE
Python_VERSION:3.8.0
Python_Development_FOUND:TRUE
Python_LIBRARIES:/usr/lib/x86_64-linux-gnu/libpython3.8.so