在程序中需要使用到团队其它成员开发的静态库和动态库,起初是知道使用LIBS变量在在.pro文件中指定需要包含的库,但是实际使用的时候却遇到很大麻烦,但其实确实是因为自己看官方文档不太用心造成的。

下面是官方文档对于LIBS变量的使用说明:

这段话对于LIBS的使用说的很清楚了,就是-L指定库的目录,而-l指定库的名字(如果是在Linux下,则去掉lib和后缀名,windows下去掉后缀名即可),静态库、动态库都是一样的。但是它没说的是,如果使用相对路径,而库又想要被程序找的到,那么这个相对路径指的是执行程序生成的位置于库的相对路径,因为QT编译时会把生成路径放在和项目相同目录下的另一个文件夹中,那么也就是说,我们必须把库拷贝到编译生成的目录下才行(这里解释一下,可能是受VC的影响,VC中编译生成目录默认是在项目根目录下的,所以养成了习惯,误以为在Qt中也是把库放在根目录下就可以了,其实这是错的)。

如果不想把库拷贝到编译输出目录,那么也可以指定绝对路径。下面是两种方式的对比:

1、相对路径:

需要将库拷贝到与生成应用程序相对路径的目录下才行

在window下使用qmake“翻译”过生成的makefile文件中的路径为:


可以看到用线圈起来的地方,就是GCC标准的参数,指定了库的位置。

2、绝对路径:


使用红线圈起来的地方就是绝对路径,在window下,qmake“翻译”过生成的makefile文件中指定了库的文件,显然是绝对路径。

3、自动生成.pro

除了手动设置库文件的位置,还可以使用导入的方式,让QtCreator自动生成导入库文件的方式。步骤如下:

在工程文件上右键选择添加库,到下一步,选择External library。

然后按照指示,指定库的位置即可。然后QtCreator会自动生成具有绝对路径的库文件指定语句。

4、总结

最后,库的写法与头文件的包含类似,也可以使用反斜线将其放在不同行对齐,如果许多库属于同一个目录,那么只要在最前面用-L指定目录,后面所有的库用空格分开就行了。如下面的写法:

再傻瓜一点的解释就是:

用法:LIBS += -Lzzz -lxxx -lyyy

zzz:库路径

xxx。yyy:库文件

库路径可以有以下形式:

-L. 表示 .pro所在目录

-L$$PRO_FILE_PWD/ 表示 .pro所在目录

-L$$PWD/ 表示 .pro所在目录

-LC:/abc/ 表示C:/abc/

库文件可以有以下形式:

若.pro所在目录lib下有解码库需要被链接,msvc版本为“VideoDecoder.lib”,mingw版本为“libVideoDecoder.a”。

(1)不加-l时,需要写库文件全名:

LIBS += -L$$PWD/lib VideoDecoder.lib

LIBS += -L$$PWD/lib libVideoDecoder.a

这样写死,不利于多编译器编译,不推荐。

(2)加-l时,可以将不同编译器库文件名差异屏蔽掉

假设链接msvc库,则只需要去掉文件后缀(一般是.lib):

LIBS += -L$$PWD/lib -lVideoDecoder

假设链接mingw/gcc库,则需要去掉文件前缀"lib",和后缀(一般是.a):

LIBS += -L$$PWD/lib -lVideoDecoder

这样不管在哪个编译器下,都能保证命令一致。

注意:

请牢记msvc库只去后缀,mingw库去前缀和后缀。

因为我遇到一个问题,使用msvc编译工程,工程中调用了boost线程库,boost使用msvc编译为静态库,这个静态线程库

的名字比较坑“libboost_thread-vc141-mt-gd-x64-1_71.lib”,按照我们一贯的想法,肯定是去掉前lib,去掉后缀.lib,像这样:

LIBS += -LC:/Boost_msvc_static/lib/ -lboost_thread-vc141-mt-gd-x64-1_71

死活编译不过,找不到库文件。此时,你只要想起来链接msvc库只去后缀,像这样:

LIBS += -LC:/Boost_msvc_static/lib/ -llibboost_thread-vc141-mt-gd-x64-1_71

编译就通过了。

附《msvc、mingw分别编译动态库与静态库文件名区别》:

msvc动态库:test.dll,test.lib

msvc静态库:test.lib

mingw动态库:test.dll、libtest.a

mingw静态库:libtest.a

原文链接:https://blog.csdn.net/zyhse/article/details/105408639/

代码示例:

QT       += core gui
#引入c++11
CONFIG  += C++11
#引入头文件的路径
INCLUDEPATH += D:\opencv\opencv3.2\configure\install\include
#引入库的路径并添加库
#LIBS += -LD:\\opencv\\opencv3.2\\configure\\install\\x86\\mingw\\lib \
#        libopencv_core320 \
#引入路径下的所有库
LIBS += D:/opencv/opencv3.2/configure/install/x86/mingw/lib/libopencv_*greaterThan(QT_MAJOR_VERSION, 4): QT += widgetsTARGET = OpenCVTest
TEMPLATE = appSOURCES += main.cpp\mainwindow.cppHEADERS  += mainwindow.hFORMS    += mainwindow.ui

原文链接:https://blog.csdn.net/yuxing55555/article/details/79747059

QT .pro文件 LIBS用法详解相关推荐

  1. Qt QListWidget列表框用法详解

    Qt QListWidget列表框用法详解 很多应用程序中需要以列表的形式向用户展示数据(资源),比如 Windows 操作系统会以列表的方式展示很多张桌面背景图(如图 1a) 所示),再比如很多音乐 ...

  2. Qt QLineEdit单行输入框用法详解

    Qt QLineEdit单行输入框用法详解 QLineEdit 是 Qt 提供的一个控件类,它直接继承自 QWdiget 类,专门用来创建单行输入框,如下图所示: 图 1 单行文本输入框 实际开发中, ...

  3. Qt pro 文件详解

     Qt pro 文件详解 1. TEMPLATE  变量TEMPLATE描述了为建立目标文件而采用何种模板,即生成何种形式的Makefile文件.Qmake  工具定义了5种模板:   a. 应用 ...

  4. QT pro文件详解

    1.QT pro文件配置项说明 注释:注释是从一行的#开始,到这一行的结束. QT += :这个是添加QT项目需要的模块的,若项目中要排除某个模块,也可用QT -=配置项. TEMPLATE = : ...

  5. Qt QPushButton按钮用法详解

    Qt QPushButton按钮用法详解 按钮是 GUI 开发中最常用到的一种控件,作为一款著名的 GUI 开发框架,Qt 提供了很多种按钮,比如 QPushButton(普通按钮).QRadioBu ...

  6. java 生成dump_java dump文件怎么生成和分析-JMAP用法详解

    jmap是java自带的工具 1. 查看整个JVM内存状态 jmap -heap [pid] 2. 查看JVM堆中对象详细占用情况 jmap -histo [pid] 3. 导出整个JVM 中内存信息 ...

  7. fileinput 时间_JavaScript_Bootstrap Fileinput文件上传组件用法详解,最近时间空余,总结了一些关...

    最近时间空余,总结了一些关于bootstrap fileinput组件的一些常见用法,特此分享到phpstudy平台,供大家参考,同时也方便以后的查找.本文写的不好还请见谅. 一.效果展示 1.原始的 ...

  8. python读取json格式文件大量数据,以及python字典和列表嵌套用法详解

    1.Python读取JSON报错:JSONDecodeError:Extra data:line 2 column 1 错误原因: JSON数据中数据存在多行,在读取数据时,不能够单单用open(), ...

  9. c语言fputc输入字符串,C语言fgetc和fputc函数用法详解(以字符形式读写文件)

    C语言fgetc和fputc函数用法详解(以字符形式读写文件),文件,字符,指针,函数,字节 C语言fgetc和fputc函数用法详解(以字符形式读写文件) 易采站长站,站长之家为您整理了C语言fge ...

  10. NAudio用法详解(7)Wav文件结构分析及NAudio相关对象对应关系分析

    目录 波形文件的基础知识 波形文件的存储过程 与声音有关的三个参数 1.采样频率 2.采样位数 3.声道数 WAV文件的编码 文件整体结构 RIFF区块 fmt区块(FORMAT区块) DATA区块 ...

最新文章

  1. renderer的两种使用方式
  2. python压缩文件不带根路径_python 压缩文件(解决压缩路径问题)
  3. 物联网IoT接入技术分类以及华为OC平台特性
  4. 城市管网 GIS 数据表的存储
  5. Cartographer+LOAM+ LIO-SAM核心算法与源码剖析(室内+室外)
  6. c语言范式编程之lsearch
  7. 扫雷源代码(HTML)
  8. eclipse使用git提交代码步骤
  9. Hbase下载、安装流程
  10. 原创|批处理|批处理安卓log抓取工具
  11. 苹果手机测试版软件app,APP苹果测试版UDID设置
  12. 2019-2-27-VisualStudio-插件-翻译注释
  13. 【数据库基础】02_数据库基础练习
  14. 线性代数——基变换和图像压缩
  15. 尚硅谷2020最新版宋红康JVM教程-中篇-第3章类的加载过程(类的生命周期)详解-4-过程三:Initialization(初始化)阶段
  16. 分支定界算法理解(摘抄)
  17. 全面:一文看懂5G网络(接入网+承载网+核心网)
  18. 程序设计编程题目(持续更新)
  19. 软考高项-系统架构师考试心得
  20. WINDOWS+PE权威指南读书笔记(26)

热门文章

  1. 让Mac文本编辑器成为HTML编辑器
  2. Python-《原神》荒海雷立方机关破解二
  3. 对话Chris Jones:机器人行业的下一步应该这样走
  4. mysql tp5时间倒叙_tp5(thinkPHP5框架)时间查询操作实例分析
  5. php 专业英语,给大家推荐几个专业英语翻译功能强大的网站
  6. 软考学习:吐血整理——自学软考的终极干货
  7. 【说明书】迪士尼儿童手表说明书
  8. html5给页面添加雨滴特效,JavaScript canvas实现雨滴特效
  9. 武汉大学计算机 韩立,文澜学术系列讲座 第135期 武汉大学经济与管理学院韩立宁老师:“Financial Network and Industry Connectedness”...
  10. 深度 | 苹果略胜微软一筹,为什么说 ARKit 是 AR 的最好选择?