QT中的.pro文件,以及.pri .prj .prl文件说明

(193条消息) 浅谈 qmake 之 pro、pri、prf、prl文件_1+1=10-CSDN博客_pri文件 

(193条消息) QT中的.pro文件,以及.pri .prj .prl文件说明_zjc0230的专栏-CSDN博客

Qt pro配置文件备忘 - ike_li - 博客园 (cnblogs.com)

(194条消息) Qt Creator指定临时文件生成目录(MOC_DIR/RCC_DIR等)和PWD/OUT_PWD/.pro官方文档_$firecat全宏的代码足迹$-CSDN博客

qt中的 $$PWD

$$PWD返回的是当前文件所在的路径

OUT_PWD

表示输出的“Makefile”所在的路径(通常在编译后生成的.exe文件的上层目录里)。

LIBS += -L$$OUT_PWD/../funDll/ -lfunDll

.pro

qmake 的工程(project)文件

QT .pro的一些通用配置

#设置UI文件目录
UI_DIR = ./ui

CONFIG(debug, debug|release)

{   #设置debug配置下编译生成文件的路径  

TARGET = $$join(TARGET,,,d)   #为debug版本生成的文件增加d的后缀  

contains(TEMPLATE, "lib")

{    

DESTDIR = ../output/debug/lib        #将库放在lib文件夹下    

DLLDESTDIR = ../output/debug/bin     #将动态库自动拷贝至bin目录下  

}

else

{    

DESTDIR = ../output/debug/bin        #将应用程序放在bin目录下  

}  

OBJECTS_DIR = ./debug/obj     #将生成的对象文件放在专门的obj文件夹下  

MOC_DIR = ./debug/moc         #将QT自动生成的对象放在moc文件夹下

}

else

{   #设置release配置下编译生成文件的路径  

contains(TEMPLATE, "lib")

{    

DESTDIR = ../output/release/lib        #将库放在lib文件夹下    

DLLDESTDIR = ../output/release/bin     #将动态库自动拷贝至bin目录下  

} else

{    

DESTDIR = ../output/release/bin        #将应用程序放在bin目录下

  }  

OBJECTS_DIR = ./release/obj   #将生成的对象文件放在专门的obj文件夹下  

MOC_DIR = ./release/moc       #将QT自动生成的对象放在moc文件夹下

}

.pro文件中LIBS用法详细讲解

用法: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
 

链接库 -L -l -I -i的作用及区别

 

-L

指定库文件目录,可以指定多个文件目录。库目录没有在/lib、/usr/lib、/usr/local/lib中,则必须用-L来指定一个库目录

-l(小写L)

指定具体的库文件。如果没有指定,则默认去/lib、/usr/lib、/usr/local/lib去找。默认寻找的是动态库,可以指定-static,寻找静态库。

-I(大写i)

指定头文件目录

所以,如果是我们想用一个任意文件夹下的库文件,一般做法就是

gcc  xxx.c  -o a.out  -L  库目录  -l(小写L)  具体的库文件名  -l(大写i)  库的头文件
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值