当前位置: 首页 > news >正文

郑州做茶叶的网站建设厅证件查询方式

郑州做茶叶的网站,建设厅证件查询方式,成都网站公司建设,wordpress空间清理CMake 学习笔记#xff08;访问Python#xff09; 利用Python可以做很多事情。比如#xff1a; 利用 Python 自动生成一些代码。 在我们的程序中植入一个 Python 解释器。 为了做这些事情。就需要 CMake 能够知道 python 装在哪里#xff0c;装的是什么版本的 python访问Python 利用Python可以做很多事情。比如 利用 Python 自动生成一些代码。 在我们的程序中植入一个 Python 解释器。 为了做这些事情。就需要 CMake 能够知道 python 装在哪里装的是什么版本的 python装了哪些包。是否安装了Python 相关的库。 下面就依次介绍如何实现这些功能。最核心的知识就是学会如何使用 find_package( ) 命令。 检测 Python 解释器 下面是个简单的例子。 cmake_minimum_required(VERSION 3.5 FATAL_ERROR) project(recipe-01 LANGUAGES NONE) find_package(PythonInterp REQUIRED) execute_process(COMMAND${PYTHON_EXECUTABLE} -c print(Hello, world!)RESULT_VARIABLE _statusOUTPUT_VARIABLE _hello_worldERROR_QUIETOUTPUT_STRIP_TRAILING_WHITESPACE ) message(STATUS RESULT_VARIABLE is: ${_status}) message(STATUS OUTPUT_VARIABLE is: ${_hello_world})# compare the manual messages with the following handy helper include(CMakePrintHelpers) cmake_print_variables(_status _hello_world)上面的代码最核心的有两句。find_package 用来查找 python。 find_package(PythonInterp REQUIRED)如果需要指定 python 版本。可以像下面这样下面的代码要求Python 版本不低于 3.5 find_package(PythonInterp 3.5 REQUIRED)如果要求Python 版本必须是某一个特定版本。可以像下面这样写 find_package(PythonLibs 3.11.5 EXACT REQUIRED)上面的代码要求python 的版本必须是3.11.5。find_package() 执行完后会自动生成一系列的变量我们可以在后面的代码中使用这些变量。 PYTHONINTERP_FOUND, 布尔变量记录是否找到 python 解释器PYTHON_EXECUTABLE, python 解释器的路径PYTHON_VERSION_STRING, python 的版本PYTHON_VERSION_MAJOR, python 的主版本号PYTHON_VERSION_MINOR, python 的副版本号PYTHON_VERSION_PATCH, python 的版本修订号 另外需要掌握的是 execute_process()。 用这个命令可以调用 python 执行一段特殊的程序。通常我们是利用 python 生成一段源代码。之所以用 python 生成代码。是因为可以利用 python 对当前系统做很多探测根据系统的情况生成最适合的代码。或者我们的代码里有很多重复的地方。用python可以快速生成这些重复的代码。 总之用上面的类似的方法我们可以调用任意一段 python 程序做我们想做的任意事情。 如果python 安装到了 cmake 无法自动检测到的位置我们可以通过命令行告诉cmake 去哪里找 python: cmake -D PYTHON_EXECUTABLE/custom/location/python检测 Python 库 第二种使用 python 的方法是在我们的程序中直接调用 python 。下面是一个简单的程序 #include Python.h int main(int argc, char *argv[]) {Py_SetProgramName(argv[0]); /* optional but recommended */Py_Initialize();PyRun_SimpleString(from time import time,ctime\nprint Today is,ctime(time())\n);Py_Finalize();return 0; }我们要编译这个程序。 cmake_minimum_required(VERSION 3.5 FATAL_ERROR) project(recipe-02 LANGUAGES C) set(CMAKE_C_STANDARD 99) set(CMAKE_C_EXTENSIONS OFF) set(CMAKE_C_STANDARD_REQUIRED ON) find_package(PythonInterp REQUIRED) find_package(PythonLibs ${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR} EXACT REQUIRED) add_executable(hello-embedded-python hello-embedded-python.c)target_include_directories(hello-embedded-python PRIVATE ${PYTHON_INCLUDE_DIRS} )target_link_libraries(hello-embedded-python PRIVATE ${PYTHON_LIBRARIES} )在我的电脑上运行的结果是这样的 Could not find platform independent libraries prefix Today is Tue May 7 08:51:16 2024第一行是因为我没有设置环境变量这个程序找不到我电脑里的python。但是这个并不影响程序运行。 检测 Python 包 下面是个更复杂的代码。里面调用了 Python 的包。为了能编译运行这个代码需要cmake 检测我们的 python 是否安装了对应的包。 /** Code example from:* https://docs.python.org/3.5/extending/embedding.html#pure-embedding*/#include Python.hint main(int argc, char *argv[]) {PyObject *pName, *pModule, *pDict, *pFunc;PyObject *pArgs, *pValue;int i;if (argc 3) {fprintf(stderr, Usage: pure-embedding pythonfile funcname [args]\n);return 1;}Py_Initialize();PyRun_SimpleString(import sys);PyRun_SimpleString(sys.path.append(\.\));pName PyUnicode_DecodeFSDefault(argv[1]);/* Error checking of pName left out */pModule PyImport_Import(pName);Py_DECREF(pName);if (pModule ! NULL) {pFunc PyObject_GetAttrString(pModule, argv[2]);/* pFunc is a new reference */if (pFunc PyCallable_Check(pFunc)) {pArgs PyTuple_New(argc - 3);for (i 0; i argc - 3; i) {pValue PyLong_FromLong(atoi(argv[i 3]));if (!pValue) {Py_DECREF(pArgs);Py_DECREF(pModule);fprintf(stderr, Cannot convert argument\n);return 1;}/* pValue reference stolen here: */PyTuple_SetItem(pArgs, i, pValue);}pValue PyObject_CallObject(pFunc, pArgs);Py_DECREF(pArgs);if (pValue ! NULL) {printf(Result of call: %ld\n, PyLong_AsLong(pValue));Py_DECREF(pValue);} else {Py_DECREF(pFunc);Py_DECREF(pModule);PyErr_Print();fprintf(stderr, Call failed\n);return 1;}} else {if (PyErr_Occurred())PyErr_Print();fprintf(stderr, Cannot find function \%s\\n, argv[2]);}Py_XDECREF(pFunc);Py_DECREF(pModule);} else {PyErr_Print();fprintf(stderr, Failed to load \%s\\n, argv[1]);return 1;}Py_Finalize();return 0; } 我们的这个程序还要调用一段 python 代码 import numpy as np def print_ones(rows, cols): A np.ones(shape(rows, cols), dtypefloat) print(A) # we return the number of elements to verify # that the C code is able to receive return values num_elements rows*cols return(num_elements)cmake 文件前部分还是一样的 cmake_minimum_required(VERSION 3.5 FATAL_ERROR) project(recipe-03 LANGUAGES CXX) set(CMAKE_CXX_STANDARD 11) set(CMAKE_CXX_EXTENSIONS OFF) set(CMAKE_CXX_STANDARD_REQUIRED ON) find_package(PythonInterp REQUIRED) find_package(PythonLibs ${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR} EXACT REQUIRED)后面的部分就不同了。首先要检测有没有安装 numpy: # Find NumPy location execute_process(COMMAND${PYTHON_EXECUTABLE} -c import re, numpy; print(re.compile(/__init__.py.*).sub(,numpy.__file__))RESULT_VARIABLE _numpy_statusOUTPUT_VARIABLE _numpy_locationERROR_QUIETOUTPUT_STRIP_TRAILING_WHITESPACE) if(NOT _numpy_status)set(NumPy ${_numpy_location} CACHE STRING Location of NumPy) endif()# Find NumPy version execute_process(COMMAND${PYTHON_EXECUTABLE} -c import numpy; print(numpy.__version__)OUTPUT_VARIABLE _numpy_versionERROR_QUIETOUTPUT_STRIP_TRAILING_WHITESPACE)include(FindPackageHandleStandardArgs) find_package_handle_standard_args(NumPyFOUND_VAR NumPy_FOUNDREQUIRED_VARS NumPyVERSION_VAR _numpy_version)这一段代码主要有2部分组成。首先是判断有没有安装 numpy代码如下。 execute_process(COMMAND${PYTHON_EXECUTABLE} -c import re, numpy; print(re.compile(/__init__.py.*).sub(,numpy.__file__))RESULT_VARIABLE _numpy_statusOUTPUT_VARIABLE _numpy_locationERROR_QUIETOUTPUT_STRIP_TRAILING_WHITESPACE)if(NOT _numpy_status)set(NumPy ${_numpy_location} CACHE STRING Location of NumPy) endif()如果找到了numpy _numpy_status 0。 所以后面的判断条件是 if(NOT _numpy_status) 。 找到 numpy 后将numpy 的位置保存到一个变量 NumPy 中并且这个 变量是 CACHE 的也就是后面用户可以自己编辑这个变量的值。 然后是检测 numpy 的版本 # Find NumPy version execute_process(COMMAND${PYTHON_EXECUTABLE} -c import numpy; print(numpy.__version__)OUTPUT_VARIABLE _numpy_versionERROR_QUIETOUTPUT_STRIP_TRAILING_WHITESPACE)版本号保存到 _numpy_version 这个变量中。然后用 FindPackageHandleStandardArgs 这个包的功能设置 NumPy_FOUND 变量。这里使用FindPackageHandleStandardArgs 的目的其实只有一个就是当 NumPy 没找到时cmake 可以抱错并停下来。 include(FindPackageHandleStandardArgs) find_package_handle_standard_args(NumPy FOUND_VAR NumPy_FOUND REQUIRED_VARS NumPy VERSION_VAR _numpy_version )后面如何编译exe文件这里也用了些技巧比如用到了 PYTHON_VERSION_MAJOR add_executable(pure-embedding ) target_sources(pure-embedding PRIVATE Py${PYTHON_VERSION_MAJOR}-pure-embedding.cpp ) target_include_directories(pure-embedding PRIVATE ${PYTHON_INCLUDE_DIRS} ) target_link_libraries(pure-embedding PRIVATE ${PYTHON_LIBRARIES} )还有最后一部分我们要把 use_numpy.py 文件拷贝到 exe 所在目录因为我们的程序要调用这个文件 add_custom_command(OUTPUT${CMAKE_CURRENT_BINARY_DIR}/use_numpy.pyCOMMAND${CMAKE_COMMAND} -E copy_if_different ${CMAKE_CURRENT_SOURCE_DIR}/use_numpy.py${CMAKE_CURRENT_BINARY_DIR}/use_numpy.pyDEPENDS${CMAKE_CURRENT_SOURCE_DIR}/use_numpy.py)# make sure building pure-embedding triggers the above # custom command target_sources(pure-embeddingPRIVATE${CMAKE_CURRENT_BINARY_DIR}/use_numpy.py) 编译生成 pure-embedding.exe 后可以试着运行一下。 ./pure-embedding use_numpy print_ones 2 3结果如下 [[1. 1. 1.] [1. 1. 1.]] Result of call: 6
http://www.dnsts.com.cn/news/36677.html

相关文章:

  • 婚礼礼网站如何做的wordpress防偷代码
  • 外贸常用的网站wordpress服务器出错
  • 网站建设 千助学生网站作品
  • 用软件建网站石景山安保服务公司电话
  • 郑州巩义网站建设易优cms企业网站管理系统
  • 长沙 外贸网站建设公司价格免费建设一个可以访问的网站
  • 刚成立公司如何做网站wordpress 顶踩插件
  • 监控公司建设网站推广经营范围衡水网站建设的地方
  • 梅河口网站开发wordpress模板QQ评论
  • 爱站工具包的模块有哪些慈溪市住房和城乡建设局网站
  • wordpress如何自动采集网站图片网站设计集团
  • 网站开发只要青岛建站合作
  • 昆山教育平台网站建设大型网站建立
  • 用windows建设网站好吗无锡网络公司有哪些
  • 骑士cms怎么从别的网站采集信息seo快速上排名
  • 外国产品设计网站淘客推广是什么
  • 怎么学习网站开发seo快速推广
  • 社交(sns)网站的完整设计思路网站建设与运营就业
  • 大连企业招聘网站专业设计软件
  • 长春网站优化教程外贸接单十大网站
  • 如何做问卷调查网站网站弄论坛形式怎么做
  • 在线网站代理浏览驻马店市住房和城乡建设局网站
  • 网站推广广告 优帮云wordpress3.0手机版
  • 微信公众号申请网站商城网站制作方案
  • 三亚做网站服务中国对外贸易公司排名
  • 网站建设莱州哪家强?校园网站开发的目的
  • 手机网站一般做多大尺寸wordpress中文页面
  • 保亭整站优化青海省住房和城乡建设厅官方网站
  • 网站开发背景绪论软文推广案例500字
  • 网站建设的意义怎么写房地产微网站