FindPython2¶
在 3.12 版本中新增。
查找 Python 2 解释器、编译器和开发环境(包含目录和库)。
3.19 版本新增: 当请求版本时,可以将其指定为简单值或范围。有关版本范围用法和功能的详细描述,请参阅 find_package()
命令。
支持以下组件
Interpreter
: 搜索 Python 2 解释器Compiler
: 搜索 Python 2 编译器。仅由 IronPython 提供。Development
: 搜索开发工件(包含目录和库)。3.18 版本新增: 此组件包含两个可以独立指定的子组件
Development.Module
: 搜索 Python 2 模块开发所需的工件。Development.Embed
: 搜索 Python 2 嵌入式开发所需的工件。
NumPy
: 搜索 NumPy 包含目录。
3.14 版本新增: 添加了 NumPy
组件。
如果未指定 COMPONENTS
,则假定为 Interpreter
。
如果指定了组件 Development
,则意味着子组件 Development.Module
和 Development.Embed
。
为了确保组件 Interpreter
、Compiler
、Development
(或其子组件之一)和 NumPy
之间的版本一致,请同时指定所有组件
find_package (Python2 COMPONENTS Interpreter Development)
此模块仅查找 Python 2 版本。此模块可以与 FindPython3
模块同时使用,以使用两个 Python 版本。
如果 Python 版本对您而言无关紧要,则可以使用 FindPython
模块。
注意
如果同时指定了组件 Interpreter
和 Development
(或其子组件之一),则此模块仅搜索与 CMake 配置定义的平台架构相同的解释器。如果仅指定 Interpreter
组件,则此约束不适用。
导入目标¶
此模块定义以下 导入目标
在 3.14 版本中变更: 仅当 CMAKE_ROLE
为 PROJECT
时,才会创建 导入目标。
Python2::Interpreter
Python 2 解释器。仅当找到
Interpreter
组件时才定义此目标。Python2::InterpreterDebug
在 3.30 版本中新增。
Python 2 调试解释器。仅当找到
Interpreter
组件并且定义了Python2_EXECUTABLE_DEBUG
变量时,才定义此目标。该目标仅在Windows
平台上定义。Python2::InterpreterMultiConfig
在 3.30 版本中新增。
Python 2 解释器。将根据上下文(平台、配置)使用解释器的发布或调试版本。仅当找到
Interpreter
组件时才定义此目标Python2::Compiler
Python 2 编译器。仅当找到
Compiler
组件时才定义此目标。Python2::Module
在 3.15 版本中新增。
用于 Python 模块的 Python 2 库。如果找到组件
Development.Module
,则定义目标。Python2::Python
用于 Python 嵌入的 Python 2 库。如果找到组件
Development.Embed
,则定义目标。Python2::NumPy
在 3.14 版本中新增。
用于 Python 2 的 NumPy 库。如果找到组件
NumPy
,则定义目标。
结果变量¶
此模块将在您的项目中设置以下变量(请参阅 标准变量名称)
Python2_FOUND
系统具有请求的 Python 2 组件。
Python2_Interpreter_FOUND
系统具有 Python 2 解释器。
Python2_EXECUTABLE
Python 2 解释器的路径。
Python2_EXECUTABLE_DEBUG
在 3.30 版本中新增。
调试 Python 2 解释器的路径。它仅在
Windows
平台上定义。Python2_INTERPRETER
在 3.30 版本中新增。
Python 2 解释器的路径,定义为
生成器表达式
,根据上下文(平台、配置)选择Python2_EXECUTABLE
或Python2_EXECUTABLE_DEBUG
变量。Python2_INTERPRETER_ID
- 解释器唯一的短字符串。可能的值包括
Python
ActivePython
Anaconda
Canopy
IronPython
PyPy
Python2_STDLIB
标准平台独立安装目录。
由
sysconfig.get_path('stdlib')
或distutils.sysconfig.get_python_lib(plat_specific=False,standard_lib=True)
返回的信息。Python2_STDARCH
标准平台相关安装目录。
由
sysconfig.get_path('platstdlib')
或distutils.sysconfig.get_python_lib(plat_specific=True,standard_lib=True)
返回的信息。Python2_SITELIB
第三方平台独立安装目录。
由
sysconfig.get_path('purelib')
或distutils.sysconfig.get_python_lib(plat_specific=False,standard_lib=False)
返回的信息。Python2_SITEARCH
第三方平台相关安装目录。
由
sysconfig.get_path('platlib')
或distutils.sysconfig.get_python_lib(plat_specific=True,standard_lib=False)
返回的信息。Python2_Compiler_FOUND
系统具有 Python 2 编译器。
Python2_COMPILER
Python 2 编译器的路径。仅由 IronPython 提供。
Python2_COMPILER_ID
- 编译器唯一的短字符串。可能的值包括
IronPython
Python2_DOTNET_LAUNCHER
在 3.18 版本中新增。
.Net
解释器。仅由IronPython
实现使用。Python2_Development_FOUND
系统具有 Python 2 开发工件。
Python2_Development.Module_FOUND
在 3.18 版本中新增。
系统具有用于 Python 模块的 Python 2 开发工件。
Python2_Development.Embed_FOUND
在 3.18 版本中新增。
系统具有用于 Python 嵌入的 Python 2 开发工件。
Python2_INCLUDE_DIRS
Python 2 包含目录。
Python2_DEBUG_POSTFIX
在 3.30 版本中新增。
调试 python 模块的后缀。此变量可用于定义
DEBUG_POSTFIX
目标属性。Python2_LINK_OPTIONS
在 3.19 版本中新增。
Python 2 链接选项。某些配置需要特定的链接选项才能正确构建和执行。
Python2_LIBRARIES
Python 2 库。
Python2_LIBRARY_DIRS
Python 2 库目录。
Python2_RUNTIME_LIBRARY_DIRS
Python 2 运行时库目录。
Python2_VERSION
Python 2 版本。
Python2_VERSION_MAJOR
Python 2 主版本。
Python2_VERSION_MINOR
Python 2 次版本。
Python2_VERSION_PATCH
Python 2 补丁版本。
Python2_PyPy_VERSION
在 3.18 版本中新增。
Python 2 PyPy 版本。
Python2_NumPy_FOUND
在 3.14 版本中新增。
系统具有 NumPy。
Python2_NumPy_INCLUDE_DIRS
在 3.14 版本中新增。
NumPy 包含目录。
Python2_NumPy_VERSION
在 3.14 版本中新增。
NumPy 版本。
提示¶
Python2_ROOT_DIR
定义 Python 2 安装的根目录。
Python2_USE_STATIC_LIBS
如果未定义,则按顺序搜索共享库和静态库。
如果设置为 TRUE,则 **仅** 搜索静态库。
如果设置为 FALSE,则 **仅** 搜索共享库。
注意
由于静态库在此平台上不可用,因此在
Windows
上将忽略此提示。Python2_FIND_STRATEGY
在 3.15 版本中新增。
此变量定义查找的执行方式。
Python2_FIND_STRATEGY
变量可以设置为以下之一VERSION
: 尝试在所有指定位置查找最新版本。如果策略CMP0094
未定义或设置为OLD
,则这是默认设置。LOCATION
: 一旦找到满足版本约束的版本,便停止查找。如果策略CMP0094
设置为NEW
,则这是默认设置。
另请参阅
Python2_FIND_UNVERSIONED_NAMES
。Python2_FIND_REGISTRY
在 3.13 版本中新增。
在 Windows 上,
Python2_FIND_REGISTRY
变量确定注册表和环境变量之间的首选顺序。Python2_FIND_REGISTRY
变量可以设置为以下之一FIRST
: 尝试先使用注册表,然后再使用环境变量。这是默认设置。LAST
: 尝试先使用环境变量,然后再使用注册表。NEVER
: 永远不要尝试使用注册表。
Python2_FIND_FRAMEWORK
在 3.15 版本中新增。
在 macOS 上,
Python2_FIND_FRAMEWORK
变量确定 Apple 样式和 unix 样式包组件之间的首选顺序。此变量可以采用与CMAKE_FIND_FRAMEWORK
变量相同的值。注意
不支持值
ONLY
,因此将改用FIRST
。如果未定义
Python2_FIND_FRAMEWORK
,则将使用CMAKE_FIND_FRAMEWORK
变量(如果有)。Python2_FIND_VIRTUALENV
在 3.15 版本中新增。
此变量定义如何处理由
virtualenv
或conda
管理的虚拟环境。仅当虚拟环境处于活动状态时(即已评估activate
脚本),此变量才有意义。在这种情况下,它优先于Python2_FIND_REGISTRY
和CMAKE_FIND_FRAMEWORK
变量。Python2_FIND_VIRTUALENV
变量可以设置为以下之一FIRST
: 在查找解释器的任何其他标准路径之前,先使用虚拟环境。这是默认设置。ONLY
: 仅使用虚拟环境查找解释器。STANDARD
: 不使用虚拟环境查找解释器,但始终考虑环境变量PATH
。在这种情况下,可以将变量Python2_FIND_REGISTRY
(Windows) 或CMAKE_FIND_FRAMEWORK
(macOS) 设置为值LAST
或NEVER
,以优先从虚拟环境中选择解释器。
3.17 版本新增: 添加了对
conda
环境的支持。注意
如果请求了组件
Development
(或其子组件之一)但未找到或返回了错误的工件,则同时包含组件Interpreter
可能会有所帮助。Python2_FIND_IMPLEMENTATIONS
在 3.18 版本中新增。
此变量以有序列表的形式定义将要搜索的不同实现。
Python2_FIND_IMPLEMENTATIONS
变量可以包含以下值CPython
: 这是标准实现。诸如Anaconda
或ActivePython
之类的各种产品都依赖于此实现。IronPython
: 此实现使用CSharp
语言,用于.NET Framework
,基于 动态语言运行时 (DLR
)。请参阅 IronPython。PyPy
: 此实现使用RPython
语言和RPython 翻译工具链
来生成 python 解释器。请参阅 PyPy。
默认值为
Windows 平台:
CPython
,IronPython
其他平台:
CPython
注意
此提示的优先级在所有提示中最低,因此即使例如您首先指定
IronPython
,然后在第二位指定CPython
,也可能选择基于CPython
的 python 产品,因为例如使用Python2_FIND_STRATEGY=LOCATION
,每个位置将首先搜索IronPython
,然后搜索CPython
。注意
当指定
IronPython
时,在Windows
以外的平台上,期望.Net
解释器(即mono
命令)可通过PATH
变量获得。Python2_FIND_UNVERSIONED_NAMES
在 3.20 版本中新增。
此变量定义如何搜索通用名称。当前,它仅适用于解释器的通用名称,即
python2
和python
。Python2_FIND_UNVERSIONED_NAMES
变量可以设置为以下值之一FIRST
: 在搜索更专业的名称(例如python2.5
)之前,先搜索通用名称。LAST
: 在搜索更专业的名称之后,再搜索通用名称。这是默认设置。NEVER
: 完全不搜索通用名称。
另请参阅
Python2_FIND_STRATEGY
。
工件规范¶
在 3.16 版本中新增。
为了解决特殊情况,可以通过设置以下变量直接指定工件
Python2_EXECUTABLE
Python2_EXECUTABLE
Python2_COMPILER
Python2_COMPILER
Python2_DOTNET_LAUNCHER
在 3.18 版本中新增。
.Net
解释器。仅由IronPython
实现使用。Python2_LIBRARY
库的路径。它将用于计算变量
Python2_LIBRARIES
、Python2_LIBRARY_DIRS
和Python2_RUNTIME_LIBRARY_DIRS
。Python2_INCLUDE_DIR
Python
标头的目录路径。它将用于计算变量Python2_INCLUDE_DIRS
。Python2_NumPy_INCLUDE_DIR
NumPy
标头的目录路径。它将用于计算变量Python2_NumPy_INCLUDE_DIRS
。
注意
所有路径都必须是绝对路径。任何使用相对路径指定的工件都将被忽略。
注意
当指定工件时,将忽略所有 HINTS
,并且不会对此工件执行搜索。
如果指定了多个工件,则用户有责任确保各种工件的一致性。
默认情况下,此模块支持在项目的不同目录中进行多次调用,并具有不同的版本/组件要求,同时为每次调用提供正确且一致的结果。为了支持此行为,CMake 缓存未使用传统方式,这对于交互式规范可能会有问题。因此,为了也启用交互式规范,可以使用以下变量控制模块行为
Python2_ARTIFACTS_INTERACTIVE
在 3.18 版本中新增。
选择模块的行为。这是一个布尔变量
如果设置为
TRUE
:为上述工件规范变量创建 CMake 缓存条目,以便用户可以交互式地编辑它们。这将禁用对多个版本/组件要求的支持。如果设置为
FALSE
或未定义:启用对多个版本/组件要求的支持。
Python2_ARTIFACTS_PREFIX
在 4.0 版本中新增。
定义一个自定义前缀,该前缀将用于定义所有结果变量、目标和命令。通过使用此变量,此模块支持在同一目录中进行多次调用,并具有不同的版本/组件要求。例如,在交叉编译的情况下,需要开发组件,但也可能需要本机 python 解释器
find_package(Python2 COMPONENTS Development) set(Python2_ARTIFACTS_PREFIX "_HOST") find_package(Python2 COMPONENTS Interpreter) # Here Python2_HOST_EXECUTABLE and Python2_HOST::Interpreter artifacts are defined
注意
为了与模块的标准行为保持一致,各种标准
_FOUND
变量(即没有自定义前缀)也由每次调用find_package()
命令定义。
命令¶
此模块定义命令 Python2_add_library
(当 CMAKE_ROLE
为 PROJECT
时),该命令具有与 add_library()
相同的语义,并添加对目标 Python2::Python
的依赖,或者当库类型为 MODULE
时,添加对目标 Python2::Module
的依赖,并负责处理 Python 模块命名规则
Python2_add_library (<name> [STATIC | SHARED | MODULE]
<source1> [<source2> ...])
如果未指定库类型,则假定为 MODULE
。
3.30 版本新增: 对于 MODULE
类型,如果定义了 Python2_DEBUG_POSTFIX
变量,则使用其值初始化 DEBUG_POSTFIX
目标属性。