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。
版本 4.1 更改: 在交叉编译模式下(即 CMAKE_CROSSCOMPILING 变量定义为 true),当策略 CMP0190 设置为 NEW 时,以下限制适用于所请求的组件
Interpreter或Compiler单独:将搜索主机工件。Interpreter或Compiler与Development或任何子组件:将搜索目标构建产物。在这种情况下,必须定义CMAKE_CROSSCOMPILING_EMULATOR变量,并将其用于执行解释器或编译器。
当同时需要主机和目标构建产物时,应该对 find_package() 命令进行两次不同的调用。Python_ARTIFACTS_PREFIX 变量在此情况下可能有用。
为了确保组件 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::InterpreterPython 2 解释器。此目标仅在找到
Interpreter组件时定义。Python2::InterpreterDebug3.30 版本新增。
Python 2 调试解释器。此目标仅在找到
Interpreter组件且定义了Python2_EXECUTABLE_DEBUG变量时定义。此目标仅在Windows平台上定义。Python2::InterpreterMultiConfig3.30 版本新增。
Python 2 解释器。根据上下文(平台、配置)使用解释器的发布或调试版本。此目标仅在找到
Interpreter组件时定义Python2::CompilerPython 2 编译器。此目标仅在找到
Compiler组件时定义。Python2::Module版本 3.15 新增。
用于 Python 模块的 Python 2 库。在找到组件
Development.Module时定义目标。Python2::Python用于 Python 嵌入的 Python 2 库。在找到组件
Development.Embed时定义目标。Python2::NumPy3.14 版新增。
用于 Python 2 的 NumPy 库。在找到组件
NumPy时定义目标。
结果变量¶
此模块将在您的项目中设置以下变量(请参阅 标准变量名)
Python2_FOUND系统具有 Python 2 所需的组件。
Python2_Interpreter_FOUND系统具有 Python 2 解释器。
Python2_EXECUTABLEPython 2 解释器的路径。
Python2_EXECUTABLE_DEBUG3.30 版本新增。
调试 Python 2 解释器的路径。它仅在
Windows平台上定义。Python2_INTERPRETER3.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_COMPILERPython 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_DIRSPython 2 包含目录。
Python2_DEBUG_POSTFIX3.30 版本新增。
调试 python 模块的后缀。此变量可用于定义
DEBUG_POSTFIX目标属性。Python2_LINK_OPTIONS3.19 版本新增。
Python 2 链接选项。某些配置需要特定的链接选项才能正确构建和执行。
Python2_LIBRARIESPython 2 库。
Python2_LIBRARY_DIRSPython 2 库目录。
Python2_RUNTIME_LIBRARY_DIRSPython 2 运行时库目录。
Python2_VERSIONPython 2 版本。
Python2_VERSION_MAJORPython 2 主版本。
Python2_VERSION_MINORPython 2 次版本。
Python2_VERSION_PATCHPython 2 补丁版本。
Python2_PyPy_VERSION在 3.18 版本中新增。
Python 2 PyPy 版本。
Python2_NumPy_FOUND3.14 版新增。
系统具有 NumPy。
Python2_NumPy_INCLUDE_DIRS3.14 版新增。
NumPy 包含目录。
Python2_NumPy_VERSION3.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_REGISTRY3.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语言,在 Dynamic Language Runtime (DLR) 之上用于.NET Framework。参见 IronPython。PyPy: 此实现使用RPython语言和RPython translation toolchain来生成 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_COMPILER编译器的路径。
Python2_DOTNET_LAUNCHER在 3.18 版本中新增。
.Net 解释器。仅由
IronPython实现使用。Python2_LIBRARY库的路径。它将用于计算变量
Python2_LIBRARIES、Python2_LIBRARY_DIRS和Python2_RUNTIME_LIBRARY_DIRS。Python2_INCLUDE_DIRPython 头文件目录的路径。它将用于计算变量
Python2_INCLUDE_DIRS。Python2_NumPy_INCLUDE_DIRNumPy 头文件目录的路径。它将用于计算变量
Python2_NumPy_INCLUDE_DIRS。
注意
所有路径必须是绝对路径。任何以相对路径指定的工件都将被忽略。
注意
当指定工件时,所有 HINTS 都将被忽略,并且不会为此工件执行搜索。
如果指定了多个工件,则用户有责任确保各种工件的一致性。
默认情况下,此模块支持在项目不同目录中使用不同版本/组件要求进行多次调用,同时为每次调用提供正确且一致的结果。为了支持此行为,CMake 缓存未以传统方式使用,这可能对交互式规范产生问题。因此,为了也启用交互式规范,模块行为可以通过以下变量控制
Python2_ARTIFACTS_INTERACTIVE在 3.18 版本中新增。
选择模块的行为。这是一个布尔变量
如果设置为
TRUE: 为上述构建产物规范变量创建 CMake 缓存条目,以便用户可以交互式编辑它们。这会禁用对多个版本/组件要求的支持。如果设置为
FALSE或未定义: 启用多个版本/组件要求。
Python2_ARTIFACTS_PREFIX4.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
注意
为了与模块的标准行为保持一致,每次调用
find_package()命令也会定义各种标准_FOUND变量(即不带自定义前缀)。
命令¶
本模块定义了命令 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 目标属性将使用其值初始化。