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

为了确保所有组件 InterperterCompilerDevelopmentNumPy的版本一致,需要同时指定所有的组件,如下所示:

find_package(Python3 COMPONENTS Interpreter Development)

这个模块仅寻找 Python3 的版本。该模块可以和 FindPython2 同时使用,以便可以使用两个版本的 Python

同时如果 python 的版本对你并无大碍,可以使用 FindPython 模块

注意:如果 InterpreterDevelopment 组件都被指定的话,这个模块只会搜索 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 解释器名称的唯一标识,可能是 PythonActivePythonAnacondaCanopyIronPython之一
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 安装的根目录路径

参考文章

FindPython3
浅析 C++ 调用 Python 模块

C++ CMake 使用 Python3相关推荐

  1. cmake详细教程(经验版)

    一.参考资料 CMake DSL语言 CMake 快速入门 cmake使用教程 CMake简明教程 CMake 入门实战 | HaHack Cmake入门和MindsporeLite Cmake文件分 ...

  2. 详解PyTorch编译并调用自定义CUDA算子的三种方式

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 在上一篇教程中,我们实现了一个自定义的CUDA算子add2,用来实现两个Tensor的相加.然后用Py ...

  3. Ubuntu18.4 中 eBPF bcc环境搭建

    更多文章目录:点击这里 GitHub地址:https://github.com/ljrcore 一.eBPF简介 eBPF是将原先的BPF发展成一个指令集更复杂.应用范围更广的"内核虚拟机& ...

  4. Setting up Pytorch with Python 3 on Ubuntu(Source code compilation)

    1.安装yaml依赖:sudo apt-get install python-yaml python3-yaml 2.git clone pytorch 源码: git clone https://g ...

  5. Ubuntu20.04安装eBPF BCC

    首先去GitHub上下载bcc,我下载的是bcc-0.21.0.zip: 然后再GitHub上下载libbpf,我下载的是libbpf-0.4.0.zip: 分别将上面的压缩文件解压得到: bcc-0 ...

  6. Ubuntu 18.04 LTS上编译安装BCC

    导言 BCC是基于eBPF的一套内核探测工具,如cachestat可以探测Linux文件系统缓存命中率和状态. 虽然官方文档中给出了使用软件包的方式直接安装,但是安装好后部分工具无法正常使用. 参照文 ...

  7. HIDS-ebpf-0

    背景 简单介绍ebpf最早就是从 tcpdump 中用作网络包过滤的经典 cbpf,到成为通用 Linux 内核技术的 eBPF,已经完成华丽蜕变,为应用与神奇的内核打造了一座桥梁,在系统跟踪.观测. ...

  8. 关于vim的详细配置

    超级强大的vim配置(vimplus) 2017年03月14日 22:59:09 擒贼先擒王 阅读数:25153 From : http://www.cnblogs.com/highway-9/p/5 ...

  9. libbpf-tools编译和使用步骤

    之前尝试了两种方法使用ePBF对内核数据进行提取和分析,第一个是bcc,具体信息见我的另一个blog:eBPF初体验_mozart1756的博客-CSDN博客. 再复习一下大致的步骤: 首先,确认内核 ...

最新文章

  1. android 布局 站位符,基于android布局中的常用占位符介绍
  2. 13、 LEFT/RIGHT JOIN:外连接(左连接,右连接)
  3. Linux学习:vim 的 3 种命令模式及基本操作
  4. UVA - 489 ​​​​​​​Hangman Judge
  5. 小程序多端框架全面测评 | 程序员硬核评测
  6. PHP compact函数
  7. 使用Python在指定文件夹新建一个文本文档(其他类型文件也可)
  8. 简易PDF电子书书签制作
  9. 01-Lambert 漫反射
  10. 超算计算机能不能玩游戏,拿神威太湖之光玩游戏会怎么样?
  11. 数字油田中的虚拟光纤
  12. bp神经网络实现人脸识别,卷积神经网络手势识别
  13. outlook规则导出_如何在Outlook和Gmail之间导入和导出联系人
  14. 对于addEventListener()事件的看法
  15. 身份证过期了,银行卡上的身份证信息是不是都要去银行更新?
  16. 开发模式(敏捷开发,瀑布式开发,螺旋型开发,迭代开发,devOps开发)
  17. 3分钟搞懂阿里云服务器安装Nginx并配置静态访问页面
  18. git报错fatal: unable to access ‘https://github.com/‘: OpenSSL SSL_read: Connection was reset
  19. Holistic Image Manipulation Detection using Pixel Cooccurrence Matrices
  20. Apache: 使用mod_deflate模块启用gzip功能

热门文章

  1. Oracle问题之ORA-12560TNS:协议适配器错误-转载
  2. HSV空间Retinex理论低照度图像增强
  3. 15个经典的Spring面试常见问题
  4. Vue2简单使用及相关基础知识概念(适合小白入门,看完就能上手)
  5. 企业知识分享|如何设计产品手册/产品说明书?
  6. VAE原理详细解释(读书笔记)
  7. 中国采购招标网爬虫采集破解
  8. Python中的匿名函数
  9. 电力智能轨道巡检机器人 吊装轨道式
  10. 字节跳动月薪5万招产品经理,看到要求我傻眼了!