QT .pro文件 LIBS用法详解

在程序中需要使用到团队其它成员开发的静态库和动态库,起初是知道使用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 += widgets

TARGET = OpenCVTest
TEMPLATE = app


SOURCES += main.cpp\
        mainwindow.cpp

HEADERS  += mainwindow.h

FORMS    += mainwindow.ui

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

qmake是一个强大的构建系统,它允许开发者通过编写简单的.pro文件来管理复杂的编译过程,特别适合于Qt应用程序。要使用qmake来构建一个Qt应用程序,首先需要有一个配置好的Qt开发环境。随后,你需要创建一个.pro文件,这是qmake的配置文件,用来定义项目结构和编译选项。 参考资源链接:[qmake使用详解.pro文件语法](https://wenku.csdn.net/doc/3nqi9rhboy?spm=1055.2569.3001.10343) .pro文件是qmake的核心,它告诉qmake项目需要哪些源代码文件、头文件、资源文件,以及如何处理它们。以下是一些关键的.pro文件配置项及其作用: - `TARGET`:定义了生成的可执行文件或库的名称。 - `TEMPLATE`:指定了项目类型,如`app`代表应用程序,`lib`代表库。 - `QT`:指定项目依赖的Qt模块。 - `SOURCES`:列出所有的C++源代码文件- `HEADERS`:列出所有头文件- `FORMS`:列出所有由Qt Designer生成的.ui文件,它们会被uic工具处理。 - `RESOURCES`:列出项目中使用的.qrc资源文件,它们会被rcc工具编译。 - `INCLUDEPATH`:指定额外的头文件搜索路径。 - `LIBS`:指定项目链接的外部库。 例如,一个基本的.pro文件可能看起来像这样: ```pro TEMPLATE = app TARGET = myapp QT += core gui SOURCES += main.cpp myclass.cpp HEADERS += myclass.h FORMS += myform.ui RESOURCES += qml.qrc ``` 在这个例子中,我们定义了一个名为`myapp`的应用程序,它依赖于Qt的core和gui模块,并且包含两个源文件(main.cpp和myclass.cpp),一个头文件(myclass.h),一个用户界面文件(myform.ui)和一个资源文件(qml.qrc)。 qmake会读取.pro文件,并根据其中定义的规则生成对应的makefile,然后你可以使用make工具来编译和链接应用程序。moc工具会自动处理元对象相关的头文件,uic工具会处理用户界面文件,而rcc工具会处理资源文件。 通过这种方式,qmake大大简化了Qt项目的构建过程,使开发者能够将更多精力投入到代码编写和应用程序逻辑上,而不是繁琐的编译和链接细节中。如果你想要更深入地了解qmake以及.pro文件的具体用法,可以参考《qmake使用详解.pro文件语法》这份资料,它提供了详细的概念介绍和实践指导,帮助开发者从基础到高级功能全面掌握qmake的使用。 参考资源链接:[qmake使用详解.pro文件语法](https://wenku.csdn.net/doc/3nqi9rhboy?spm=1055.2569.3001.10343)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值