【QT】pro文件里添加又删除LIBS不影响运行的原因

2024-04-11 00:52

本文主要是介绍【QT】pro文件里添加又删除LIBS不影响运行的原因,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

我发现个问题啊,如果运行项目,发现报错,缺少某dll,接着你在pro文件里加上win32:LIBS += -lOpengl32(举个例子),接着可以运行了,接着把这行删掉,再运行,仍然可以,后续是不影响的。

但是当你把build文件夹删掉的时候,再次运行,就会出现同样的错误,gpt说是因为makefile已经存在了,已经找到了位置,后续并没有重新生成,经过我测试,发现还真是这样的。

  • 除非你删掉build文件夹再运行,否则就发现没变动

当你在Qt项目的.pro文件中添加win32:LIBS += -lOpengl32,然后成功构建项目后,这行配置指示链接器在Windows平台上链接到OpenGL库Opengl32.lib。这个库提供了OpenGL的标准函数实现,对于使用OpenGL功能的应用程序是必需的。当你首次添加这行配置并构建项目时,qmake会生成相应的Makefile,其中包含了链接到Opengl32.lib的指令。这使得项目能够找到OpenGL的实现,因此可以成功运行。

如果你在之后把这行配置删除,但没有删除构建目录(即build文件夹),然后重新构建项目,实际上并不会重新生成Makefile(因为qmake认为没有必要),或者生成的Makefile仍然包含之前的配置缓存,因此链接到Opengl32.lib的指令依然生效。这就是为什么删除那行配置后项目仍然能够运行的原因。

当你完全删除构建目录后再次构建项目,qmake会根据当前的.pro文件内容从头开始生成新的Makefile。由于此时.pro文件中已经不包含win32:LIBS += -lOpengl32这行配置,新生成的Makefile中不会包含链接到Opengl32.lib的指令,导致链接器无法找到OpenGL的实现,因此项目无法运行。

解决方案

为了确保项目能够稳定运行,如果你的项目确实依赖于OpenGL库,建议在.pro文件中保留win32:LIBS += -lOpengl32这行配置。这样,无论何时重新构建项目,无论是否删除了构建目录,项目都能够找到并链接到必需的OpenGL库。

此外,理解Qt构建过程和构建系统如何处理项目文件中的配置对于解决此类问题很有帮助。记住,每次更改.pro文件后,最好是清理(Clean)然后重新构建(Rebuild)项目,确保所有的配置更改都能正确反映到Makefile和最终的构建产物中。

这篇关于【QT】pro文件里添加又删除LIBS不影响运行的原因的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/892637

相关文章

Mysql实现范围分区表(新增、删除、重组、查看)

《Mysql实现范围分区表(新增、删除、重组、查看)》MySQL分区表的四种类型(范围、哈希、列表、键值),主要介绍了范围分区的创建、查询、添加、删除及重组织操作,具有一定的参考价值,感兴趣的可以了解... 目录一、mysql分区表分类二、范围分区(Range Partitioning1、新建分区表:2、分

MySQL 删除数据详解(最新整理)

《MySQL删除数据详解(最新整理)》:本文主要介绍MySQL删除数据的相关知识,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录一、前言二、mysql 中的三种删除方式1.DELETE语句✅ 基本语法: 示例:2.TRUNCATE语句✅ 基本语

Qt QCustomPlot库简介(最新推荐)

《QtQCustomPlot库简介(最新推荐)》QCustomPlot是一款基于Qt的高性能C++绘图库,专为二维数据可视化设计,它具有轻量级、实时处理百万级数据和多图层支持等特点,适用于科学计算、... 目录核心特性概览核心组件解析1.绘图核心 (QCustomPlot类)2.数据容器 (QCPDataC

一文详解Git中分支本地和远程删除的方法

《一文详解Git中分支本地和远程删除的方法》在使用Git进行版本控制的过程中,我们会创建多个分支来进行不同功能的开发,这就容易涉及到如何正确地删除本地分支和远程分支,下面我们就来看看相关的实现方法吧... 目录技术背景实现步骤删除本地分支删除远程www.chinasem.cn分支同步删除信息到其他机器示例步骤

python删除xml中的w:ascii属性的步骤

《python删除xml中的w:ascii属性的步骤》使用xml.etree.ElementTree删除WordXML中w:ascii属性,需注册命名空间并定位rFonts元素,通过del操作删除属... 可以使用python的XML.etree.ElementTree模块通过以下步骤删除XML中的w:as

Navicat数据表的数据添加,删除及使用sql完成数据的添加过程

《Navicat数据表的数据添加,删除及使用sql完成数据的添加过程》:本文主要介绍Navicat数据表的数据添加,删除及使用sql完成数据的添加过程,具有很好的参考价值,希望对大家有所帮助,如有... 目录Navicat数据表数据添加,删除及使用sql完成数据添加选中操作的表则出现如下界面,查看左下角从左

Qt如何实现文本编辑器光标高亮技术

《Qt如何实现文本编辑器光标高亮技术》这篇文章主要为大家详细介绍了Qt如何实现文本编辑器光标高亮技术,文中的示例代码讲解详细,具有一定的借鉴价值,有需要的小伙伴可以了解下... 目录实现代码函数作用概述代码详解 + 注释使用 QTextEdit 的高亮技术(重点)总结用到的关键技术点应用场景举例示例优化建议

如何在Mac上彻底删除Edge账户? 手动卸载Edge浏览器并清理残留文件技巧

《如何在Mac上彻底删除Edge账户?手动卸载Edge浏览器并清理残留文件技巧》Mac上的Edge账户里存了不少网站密码和个人信息,结果同事一不小心打开了,简直尴尬到爆炸,想要卸载edge浏览器并清... 如果你遇到 Microsoft Edge 浏览器运行迟缓、频繁崩溃或网页加载异常等问题,可以尝试多种方

SpringSecurity显示用户账号已被锁定的原因及解决方案

《SpringSecurity显示用户账号已被锁定的原因及解决方案》SpringSecurity中用户账号被锁定问题源于UserDetails接口方法返回值错误,解决方案是修正isAccountNon... 目录SpringSecurity显示用户账号已被锁定的解决方案1.问题出现前的工作2.问题出现原因各

Qt 设置软件版本信息的实现

《Qt设置软件版本信息的实现》本文介绍了Qt项目中设置版本信息的三种常用方法,包括.pro文件和version.rc配置、CMakeLists.txt与version.h.in结合,具有一定的参考... 目录在运行程序期间设置版本信息可以参考VS在 QT 中设置软件版本信息的几种方法方法一:通过 .pro