在使用Qt Creator开发项目的时候,需要配置*.pro文件,这里面的内容繁多,各种配置属性,变量等都可以设置,最重要的是编译就依赖这些配置,有时候一个配置设置不对,报各种莫名其妙的错误,本文是对pro文件的配置属性作一个解释,方便以后在开发过程中引用参考。
首先来看一个示例:
QT += core gui network websockets xml
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
CONFIG += c++11
# The following define makes your compiler emit warnings if you use
# any Qt feature that has been marked deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS
DEFINES += SQLITE_HAS_CODEC
CONFIG +=debug_and_release
INCLUDEPATH += ./src
#window版64位 openssl头文件路径
INCLUDEPATH += $${PWD}/ThirdPartyInclude
#MyVersion = 1.0.0
message(INCLUDEPATH = $${INCLUDEPATH})#配置属性
#message("MyVersion = " $${MyVersion})#自定义
#message("PATH = " $$(PATH))#环境变量
#message(Qt version = $$[QT_VERSION])#内置变量
#message(“Qt version” = $${QT_VERSION})#内置变量
#message("CONFIG =" $${CONFIG}) #配置属性
#message(OUT_PWD = $${OUT_PWD}) #配置属性
message("PWD = " $${PWD}) # D:/work/IMChat
#windows平台
win32:{
#windows 32位
contains(QT_ARCH, i386) {
CONFIG(debug, debug|release){
TARGET = IMChat
DESTDIR = ../win32/debug
LIBS += -L$$PWD/../win32/debug -llibeay32 -lssleay32
}else{
TARGET = IMChat
DESTDIR = ../win32/release
LIBS += -L$$PWD/../win32/lib -llibeay32 -lssleay32
}
message("32-bit " $${DESTDIR})
}else {#windows 64位
CONFIG(debug, debug|release){
TARGET = IMChat
DESTDIR = ../win64/debug
LIBS += -L$$PWD/../win64/debug -llibeay32 -lssleay32
}else{
TARGET = IMChat
DESTDIR = ../win64/release
LIBS += -L$$PWD/../win64/lib -llibeay32 -lssleay32
}
message("64-bit " $${DESTDIR})
}
}else{#Mac平台只有64位
CONFIG(debug, debug|release){
TARGET = IMChat
DESTDIR = ../bin64/debug
}else{
TARGET = IMChat
DESTDIR = ../bin64/release
}
message($DESTDIR)
}
# You can also make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
SOURCES += \
main.cpp \
mainwindow.cpp
HEADERS += \
mainwindow.h
FORMS += \
mainwindow.ui
# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target
RESOURCES += \
res.qrc
字段的解释:
HEADERS:指定C++头文件
SOURCES:指定C++实现文件
FORMS:指定需要uic处理的ui文件
RESOURCES:指定需要rcc处理的qrc文件
DEFINES:指定预定义预处理器符号
INCLUDEPATH:指定C++编译器搜索头文件路径
LIBS:指定工程要链接的库
CONFIG:指定工程配置和编译参数
QT:指定工程所要使用的Qt模块
VERSION:指定目标库版本号
TARGET:指定可执行文件或库的基本文件名,默认为当前目录名
DESTDIR:指定可执行文件放置的目录
DLLDESTDIR:指定目标库文件放置的目录
CONFIG:指定工程配置和编译参数
以下对CONFIG变量做主要介绍:
debug:编译有调试信息的可执行文件或则库
release:编译不具有调试信息可执行文件或者库(如果同时指定debug release时,只有debug有效)
warn_off:关闭大量警告,默认是打开的
qt:指应用程序使用Qt
dll:动态编译库
staticlib:静态编译库
plugin:编译一个插件
console:应用程序需要写控制台
当我们写CONFIG变量时,可以使用
如:CONFIG = qt release warn_off
或者CONFIG = qt
CONFIG += release
CONFIG += warn_off
当想要移除某个设置时:CONFIG -= warn_off
在pro文件里,可以使
message来输出各种打印信息,但每个信息的格式有区别
MyVersion = 1.2
#Qt的配置属性,通过$${varName}访问,例如
message("CONFIG =" $${CONFIG}) #配置属性
message(OUT_PWD = $${OUT_PWD})#配置属性
message(INCLUDEPATH = $${INCLUDEPATH})#配置属性
CONFIG, INCLUDEPATH, OUT_PWD这些是配置属性
#Qt的内置变量,通过$${varName}或$$[varName]访问,例如
message(Qt version = $$[QT_VERSION])#内置变量
message(“Qt version” = $${QT_VERSION})#内置变量
QT_VERSION 是内置变量
#环境变量, 通过$$(varName),例如
message("PATH = " $$(PATH))#环境变量
PATH 是环境变量
#自定义变量,通过$${varName}访问,例如
message("MyVersion = " $${MyVersion})#自定义
平台配置
win32:{SOURCES+= main.cpp }
unix:{SOURCES+= main.cpp }
等,里面还可以写条件区分版本
参考:
http://blog.chinaunix.net/uid-20665441-id-305473.html
http://blog.chinaunix.net/uid-23670869-id-2391678.html
https://blog.csdn.net/fanyun_01/article/details/79122558
http://blog.chinaunix.net/uid-23670869-id-2391678.html
https://blog.csdn.net/zkl99999/article/details/61197930
https://blog.csdn.net/zhaoyun_zzz/article/details/90575031
https://blog.csdn.net/u012734169/article/details/79740763
更新V2