C++ CMake 使用 Python3
C++ CMake 使用 Python3
CMakeListst 设置
# 如果使用的是非系统目录下的 Python 可以通过指定 Python3_ROOT_DIR 改变查找路径
# set(Python3_ROOT_DIR "${CMAKE_SOURCE_DIR}/venv")
find_package(Python3 COMPONENTS Interpreter Development REQUIRED)
add_executable(cpp-python-test main.cpp)
target_include_directories(${PROJECT_NAME} PRIVATE ${Python3_INCLUDE_DIRS})
target_link_libraries(${PROJECT_NAME} ${Python3_LIBRARIES})
测试代码
#include <Python.h>
int main(int, char **)
{
Py_Initialize();
PyRun_SimpleString("print('Hello World')");
Py_Finalize();
return 0;
}
FindPython3
找到 Python3 的解释器、编译器和开发环境(包括 include 的文件和库文件)
提供如下组件:
Interpreter
:寻找 Python3 解释器Compiler
:寻找 Python3 编译器。仅使用IronPython
时提供Development
:寻找开发环境套件(包含 include 目录和库文件)NumPy
:寻找NumPy
的 include 目录
如果没有 COMPONENT
被指定,那么默认使用 Interpreter
为了确保所有组件 Interperter
,Compiler
,Development
,NumPy
的版本一致,需要同时指定所有的组件,如下所示:
find_package(Python3 COMPONENTS Interpreter Development)
这个模块仅寻找 Python3 的版本。该模块可以和 FindPython2
同时使用,以便可以使用两个版本的 Python
同时如果 python 的版本对你并无大碍,可以使用 FindPython
模块
注意:如果
Interpreter
和Development
组件都被指定的话,这个模块只会搜索Cmake
配置的平台架构的解释器。如果仅指定了Interpreter
组件的话,这个约束不会生效。
导入的目标
这个模块定义了如下几个导入目标(当 CMAKE_ROLE
为项目时)
名称 | 说明 |
---|---|
Python3::Interpreter | Python3 解释器。如果找到 Interpreter 组件那么目标会被定义。 |
Python3::Compiler | Python3 编译器。如果找到 Compiler 组件那么目标有定义。 |
Python3::Python | Python3 嵌入库。如果找到 Development 组件那么目标有定义。 |
Python3::Module | Python3 模块。如果找到 Development 组件那么目标有定义。 |
Python3::NumPy | Python3 的 Numpy 组件。如果找到 NumPy 组件那么目标有定义。 |
结果变量
这个模块会在项目中定义下列的变量(可以查看标准变量命名)
名称 | 说明 |
---|---|
Python3_Found | 系统具有 Python3 需要的组件 |
Python3_Interpreter_Found | 系统具有 Python3 解释器 |
Python3_EXECUTABLE | Python3 解释器的路径 |
Python3_INTERPRETER_ID | 解释器名称的唯一标识,可能是 Python 、ActivePython 、Anaconda 、Canopy 、IronPython 之一 |
Python3_STDLIB | 标准平台独立安装的目录。可以通过 distutils.sysconfig.get_python_lib(plat_specific=False, standard_lib=True) 获取信息 |
Python3_STDARCH | 标准平台依赖安装的目录。可以通过 distutils.sysconfig.get_python_lib(plat_specific=True,standard_lib=True) 获取信息 |
Python3_SOABI | 模块的扩展名后缀。可以通过 distutils.sysconfig.get_config_flag('SOABI') 或 distutils.sysconfig.get_config_flag('EXT_SUFFIX') 或 python3-config --extension-suffix 获取信息 |
Python3_Compiler_FOUND | 系统具有 Python3 编译器 |
Python3_COMPILER | Python3 编译器的路径,只有使用 IronPython 时提供 |
Python3_COMPILER_ID | 编译器名称的唯一标识,可能是 IronPython |
Python3_Development_FOUND | 系统具有 Python3 开发环境套件 |
Python3_INCLUDE_DIRS | Python3 include 文件目录 |
Python3_LIBRARIES | Python3 库文件 |
Python3_LIBRARY_DIRS | Python3 库文件路径 |
Python3_RUNTIME_LIBRARY_DIRS | Python3 运行时库文件路径 |
Python3_VERSION | Python3 版本 |
Python3_VERSION_MAJOR | Python3 主版本 |
Python3_VERSION_MINOR | Python3 此版本 |
Python3_VERSION_PATCH | Python3 小版本 |
Python3_NumPy_FOUND | 系统具有 Numpy |
Python3_NumPy_INCLUDE_DIRS | NumPy include 文件目录 |
Python3_NumPy_VERSION | NumPy 版本 |
提示
用户可以通过修改如下变量的属性更改使用的 Python3 的属性,例如安装位置等
名称 | 说明 |
---|---|
Python3_ROOT_DIR | 定义 Python3 安装的根目录路径 |