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::InterpreterPython3 解释器。如果找到 Interpreter 组件那么目标会被定义。
Python3::CompilerPython3 编译器。如果找到 Compiler 组件那么目标有定义。
Python3::PythonPython3 嵌入库。如果找到 Development 组件那么目标有定义。
Python3::ModulePython3 模块。如果找到 Development 组件那么目标有定义。
Python3::NumPyPython3 的 Numpy 组件。如果找到 NumPy 组件那么目标有定义。

这个模块会在项目中定义下列的变量(可以查看标准变量命名)

名称说明
Python3_Found系统具有 Python3 需要的组件
Python3_Interpreter_Found系统具有 Python3 解释器
Python3_EXECUTABLEPython3 解释器的路径
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_COMPILERPython3 编译器的路径,只有使用 IronPython 时提供
Python3_COMPILER_ID编译器名称的唯一标识,可能是 IronPython
Python3_Development_FOUND系统具有 Python3 开发环境套件
Python3_INCLUDE_DIRSPython3 include 文件目录
Python3_LIBRARIESPython3 库文件
Python3_LIBRARY_DIRSPython3 库文件路径
Python3_RUNTIME_LIBRARY_DIRSPython3 运行时库文件路径
Python3_VERSIONPython3 版本
Python3_VERSION_MAJORPython3 主版本
Python3_VERSION_MINORPython3 此版本
Python3_VERSION_PATCHPython3 小版本
Python3_NumPy_FOUND系统具有 Numpy
Python3_NumPy_INCLUDE_DIRSNumPy include 文件目录
Python3_NumPy_VERSIONNumPy 版本

用户可以通过修改如下变量的属性更改使用的 Python3 的属性,例如安装位置等

名称说明
Python3_ROOT_DIR定义 Python3 安装的根目录路径

FindPython3
浅析 C++ 调用 Python 模块

能够从各种来源生成CMakelists.txt的Python工具 #vcproj2cmake.py 此转换器能够从vcproj文件生成CMakeLists.txt <Filter>标记中的source_group 排除文件支持 处理<Configuration>标签 VCCLCompilerTool中的COMPILE_FLAGS <工具> 预处理程序定义 #sln2cmake 处理项目依赖关系并为其创建一个CMakelists.txt 生成链接器标志 定制构建工具来定制命令 使用TensorRT来加速部署图片分类项目,此文档中包含全部 软件及依赖库 在Win10系统上完成,需要用到的软件与依赖包有:cuda 10.2 , cudnn 7.6.5 , VS2017 , OpenCV 3.4.0 , Anaconda3 , CMake 3.19.4 , TensorRT 8.0 ,代码附详细解释 Make 就是针对上面问题所设计的工具:它首先允许开发者编写一种平台无关的 CMakeList.txt 文件来定制整个编译流程,然后再根据目标用户的平台进一步生成所需的本地化 Makefile 和工程文件,如 Unix 的 Makefile 或 Windows 的 Visual Studio 工程。从而做到“Write once, run everywhere”。 写在前面的话安装caffe依赖的时候我的mac版本10.10,安装opencv遇到问题如下:Error: You are using macOS 10.10.We(and Apple)do not provide support for this old version.You may encounter build failures or other breakages.Please creat... 在cmake中常见以下错误: By not providing "FindPython3.cmake" in CMAKE_MODULE_PATH this project has asked CMake to find a package configuration file provided by "Python3", but CMake did not find one. Could not find a package configuration file provided by " 因为项目需要一些监控告警,并且要尽量在不修改项目代码的前提下,所以选择了Python写一些告警脚本。之前一直做Java相关开发,所以趁此机会学习一下Python,毕竟技多不压身😏。本文主要介绍windows系统下Python的环境配置。 其实之前成功过 作死😂... 安装了一下gtest 然后不止为何python3.8就映射过来了,也可能不是gtest的锅,反正就是突然make不成功了,报错内容: (missing: Python3_INCLUDE_DIRS Python3_LIBRARIES Python3_NumPy_INCLUDE_DIRS Development NumPy Development.Module Development.Embed) (found version "3.8.12") 暂且直接用test_ 本系列内容主要是对小土堆的《操作系统》课程的笔记整理。 b站地址:https://www.bilibili.com/video/BV1hE411t7RN?spm_id_from=333.337.search-card.all.click Pytorch加载数据初认识 1、pytorch加载数据主要涉及两个类,dataset、dataloder 假如有一堆数据 Dataset . CMake这玩意儿自从学会去fork别人的代码的时候就一直不停的出现在我的眼前,当然,去配置C++的各种库的时候也很常见。具体是干啥的,实际上一直都是一知半解的,所以花点时间,搞搞它具体是怎么个写法。 这一段我们在借鉴ros的genmsg包的实现来创建我们的数据定义到.h文件的自动生成机制。但是genmsg是ros中基于python写的包,还依赖gencpp等包。鉴于此,我们分成几步来做这件事。 (1)将ros中的genmsg包及其依赖的包都抽出来,变成一个与ros环境无关的工程gendo,然后在该工程中进行msg文件到.h文件的测试。但是没有使用catkin_make和cmake,而是用的python脚本。 (2)在gendo中编写一个cpp和.h文件,里面定义一个函数。在该函数中创建一个pytho Learning CMake Cookbook Chapter03 Part01检测python解释器Find\.cmake文件在哪?如何使用find_package()命令找不在“系统标准位置”的包?嵌入执行一个python脚本文件而不是一条单一的python语句检测python库检测python模块和包 本部分与python相关~ 检测python解释器 这部分直接在CmakeLists.txt中进行python代码的嵌入,没有C/C++相关的源码,如下所示: cmake_minimum_requir