首页 > 编程语言 >Cmake配置Qt程序调用python库的配置方法

Cmake配置Qt程序调用python库的配置方法

时间:2024-07-29 16:17:22浏览次数:13  
标签:Cmake Qt lib python directories libraries PYTHON link

在网上找了一些配置方法,最简单直接的是在cmake中加入如下语句:

set(PYTHON_EXECUTABLE /Python/Python311/python.exe)

include_directories("/PythonPython311/include")
link_directories("/PythonPython311/libs")

link_libraries(python3.lib)
link_libraries(python311.lib)

直接将电脑上安装的python路径加入进去,这样的话是可以编译运行Qt程序,但是当需要打包Qt程序到其他电脑上时,就会报错,找不到python.h。因此,再用另一种方法,将cmake中的语句修改为:

find_package(PythonLibs 3.11.0 EXACT REQUIRED)

set(PYTHON_EXECUTABLE /Python/Python311/python.exe)

include_directories(${PYTHON_INCLUDE_DIRS})
link_directories(${PYTHON_LIBRARIES})

link_libraries(python3.lib)
link_libraries(python311.lib)

通过find_package查找python路径,将对应路径保存到变量PYTHON_INCLUDE_DIRS和PYTHON_LIBRARIES中,然后通过取这两个变量的值来实现python路径的添加,但是这样有的时候也会出现find_package查找的路径不对或者查不到的问题,因此最终通过如下方法来实现:将python库文件拷贝到Qt项目的与exe文件同级目录下,修改cmake代码如下:

set(PYTHON_EXECUTABLE /Python/Python311/python.exe)

include_directories(${CMAKE_BINARY_DIR}/Python/Python311/include)
link_directories(${CMAKE_BINARY_DIR}/Python/Python311/libs)

link_libraries(python3.lib)
link_libraries(python311.lib)

其中变量CMAKE_BINARY_DIR代表可执行文件的同级目录,此时在打包程序时,将python库文件拷贝到安装包的与exe文件同级目录(即与Qt6Core.dll等Qt的dll文件的同级目录)下即可。

补充:cmake中,CMAKE_BINARY_DIR代表可执行文件的同级目录,CMAKE_SOURCE_DIR代表源码路径(即与main.cpp的同级目录)。

标签:Cmake,Qt,lib,python,directories,libraries,PYTHON,link
From: https://www.cnblogs.com/Gregg/p/18330314

相关文章

  • VSCode 的 Python 扩展中更详细的属性提示
    假设我有一个对象args由parser.parse_args()返回,并且它应该具有像args.port=6001、args.seed=1234这样的属性。当我在VSCode中按args.时,port和seed不会显示在建议的属性列表中,因为这些属性可能会......
  • 编写用于关键字检测和按钮发送的 Python Telegram 机器人
    我需要帮助用Python为我的Telegram机器人编写代码。我有一个config.py文件,其中包含两个关键字列表:keywords和button_phrases。keywords-负责在单击时显示子按钮的按钮。Button_phrases-负责单击时打开链接的按钮。我需要机器人检查用户输入的文本并按以下顺......
  • Python monorepo 打包,使用 Poetry
    我想将我的Python源代码组织到一个单一存储库中,具有以下基本结构:projectrootdir-libraryone-pyproject.toml-README-src/orgname/libraryone-__init__.py-somemodule.py-webapi-pyproject.toml-README-src/organa......
  • 如何使用Python AST给表达式a == b添加括号?
    请问,有谁知道如何使用PythonAST在代码中为a==b这样的表达式添加括号?我尝试过重写visit_Compare,但是ast.unparse中的delimit_if自动删除了我添加的括号,因为优先级a==b的值更高。你说的对,直接使用ast.unparse会因为优先级问题导致添加的括号被移除。为了解......
  • 使用 powershell 或 python 从网页列出公司名称
    我希望使用PowerShell或python仅列出URL中的公司名称:https://www.moneycontrol.com/markets/earnings/results-calendar/?activeDate=2024-07-29下面是我的python脚本用于获取网页的结构:importrequestsfrombs4importBeautifulSoup#URLo......
  • T3/A40i支持Linux-5.10新内核啦,Docker、Qt、Python统统升级!
    自2021年创龙科技推出全志国产化率100%的T3/A40i工业核心板后,不到两年时间已超过800家工业客户选择创龙科技T3/A40i平台。随着客户产品的不断升级与迭代,部分“能源电力”、“工业自动化”行业客户对T3/A40i的Linux版本提出了更高要求,主要涉及Docker、Qt、Python等组件特性。秉持......
  • 使用 Python 中的多处理防止共享内存中的数据损坏?
    我目前正在开发一个多处理Python程序,其中每个进程将其索引作为连续的4字节整数写入共享内存。并且有一个读取器可以在没有任何锁的情况下读取其他进程的索引。因为我没有使用任何同步原语,所以我担心读取器进程可能会由于逐字节写入内存而读取损坏的数据(例如,一个索引的前2个......
  • Python如何统治AI世界?一文读懂它的优势与挑战
    一、Python语言介绍1.1Python语言概述Python是一种由GuidovanRossum于1991年首次发布的高级编程语言。其设计理念强调代码的可读性和简洁性,使其成为了许多开发者的首选语言。Python的语法简洁直观,采用了缩进来定义代码块,这与其他使用花括号或关键词的编程语言不同。Python......
  • 找到一种方法将program1的输出作为python中program2的输入发送
    有人可以帮我找到一种方法将program1的输出作为python中的program2的输入发送将其保存为.csv文件不会对我有帮助,因为该程序应该尽快执行这些任务。因此我正在寻找一种方法将程序1的终端输出直接发送到程序2在Python中,可以使用子进程模块将一个程序的输出发送到另一个程......
  • 同时运行多个Python程序的最佳方法
    我有一个python程序,我想同时运行多个具有不同参数的实例。这些实例彼此之间不进行通信。在单独的终端中运行每个实例太乏味了。我考虑使用多处理模块将每个实例作为单独的进程运行,但是我希望能够随时停止和重新启动某些单独的实例,而不会中断其他正在运行的实例。是否有任何流程......