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 安装的根目录路径 |
参考文章
FindPython3
浅析 C++ 调用 Python 模块
C++ CMake 使用 Python3相关推荐
- cmake详细教程(经验版)
一.参考资料 CMake DSL语言 CMake 快速入门 cmake使用教程 CMake简明教程 CMake 入门实战 | HaHack Cmake入门和MindsporeLite Cmake文件分 ...
- 详解PyTorch编译并调用自定义CUDA算子的三种方式
点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 在上一篇教程中,我们实现了一个自定义的CUDA算子add2,用来实现两个Tensor的相加.然后用Py ...
- Ubuntu18.4 中 eBPF bcc环境搭建
更多文章目录:点击这里 GitHub地址:https://github.com/ljrcore 一.eBPF简介 eBPF是将原先的BPF发展成一个指令集更复杂.应用范围更广的"内核虚拟机& ...
- 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 ...
- Ubuntu20.04安装eBPF BCC
首先去GitHub上下载bcc,我下载的是bcc-0.21.0.zip: 然后再GitHub上下载libbpf,我下载的是libbpf-0.4.0.zip: 分别将上面的压缩文件解压得到: bcc-0 ...
- Ubuntu 18.04 LTS上编译安装BCC
导言 BCC是基于eBPF的一套内核探测工具,如cachestat可以探测Linux文件系统缓存命中率和状态. 虽然官方文档中给出了使用软件包的方式直接安装,但是安装好后部分工具无法正常使用. 参照文 ...
- HIDS-ebpf-0
背景 简单介绍ebpf最早就是从 tcpdump 中用作网络包过滤的经典 cbpf,到成为通用 Linux 内核技术的 eBPF,已经完成华丽蜕变,为应用与神奇的内核打造了一座桥梁,在系统跟踪.观测. ...
- 关于vim的详细配置
超级强大的vim配置(vimplus) 2017年03月14日 22:59:09 擒贼先擒王 阅读数:25153 From : http://www.cnblogs.com/highway-9/p/5 ...
- libbpf-tools编译和使用步骤
之前尝试了两种方法使用ePBF对内核数据进行提取和分析,第一个是bcc,具体信息见我的另一个blog:eBPF初体验_mozart1756的博客-CSDN博客. 再复习一下大致的步骤: 首先,确认内核 ...
最新文章
- android 布局 站位符,基于android布局中的常用占位符介绍
- 13、 LEFT/RIGHT JOIN:外连接(左连接,右连接)
- Linux学习:vim 的 3 种命令模式及基本操作
- UVA - 489 ​​​​​​​Hangman Judge
- 小程序多端框架全面测评 | 程序员硬核评测
- PHP compact函数
- 使用Python在指定文件夹新建一个文本文档(其他类型文件也可)
- 简易PDF电子书书签制作
- 01-Lambert 漫反射
- 超算计算机能不能玩游戏,拿神威太湖之光玩游戏会怎么样?
- 数字油田中的虚拟光纤
- bp神经网络实现人脸识别,卷积神经网络手势识别
- outlook规则导出_如何在Outlook和Gmail之间导入和导出联系人
- 对于addEventListener()事件的看法
- 身份证过期了,银行卡上的身份证信息是不是都要去银行更新?
- 开发模式(敏捷开发,瀑布式开发,螺旋型开发,迭代开发,devOps开发)
- 3分钟搞懂阿里云服务器安装Nginx并配置静态访问页面
- git报错fatal: unable to access ‘https://github.com/‘: OpenSSL SSL_read: Connection was reset
- Holistic Image Manipulation Detection using Pixel Cooccurrence Matrices
- Apache: 使用mod_deflate模块启用gzip功能