QT 工程配置pro文件
1. 工程文件
1.1 简介
2.qmake框架
TEMPLATE = app
VERSION = 1.0.1.0 # 版本号
DEFINES += APP_VERSION=\\\"$${VERSION}\\\" # 定义版本号变量
QMAKE_TARGET_COMPANY = Commpany_Name # 项目目标生产商
QMAKE_TARGET_DESCRIPTION = Detailed_description_of_the_project # 详细描述
QMAKE_TARGET_PRODUCT = Project_Name # 项目目标的产品名称
QMAKE_TARGET_COPYRIGHT = Copyright(C) 1995-2021 the China # 版权信息
# 生成PDB文件
QMAKE_CXXFLAGS_RELEASE += $$QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO
QMAKE_LFLAGS_RELEASE += $$QMAKE_LFLAGS_RELEASE_WITH_DEBUGINFO
3. 基本语法
3.1 工程类型
模板变量TEMPLATE告诉qmake为这个应用程序生成那种makefile文件。
TEMPLATE = app
序号 | 参数 | 说明 |
---|---|---|
1 | app | 建立一个应用程序的makefile。这是个默认值,所以如果模板没有被指定,该模板将会被使用。 |
2 | lib | 建立一个库的makefile。 |
3 | vcapp | 建立一个应用程序的Visual Studio项目文件。 |
4 | vclib | 建立一个库的VisualStudio项目文件。 |
5 | subdirs | 这是一个特殊的模板,它可以创建一个能够进入特定目录并且为一个项目文件生成makefile,并且为它调用make的makefile。 |
3.2 软件信息
pro文件中定义信息
VERSION = 1.0.1.0 # 版本号
DEFINES += APP_VERSION=\\\"$${VERSION}\\\" # 定义版本号变量
QMAKE_TARGET_COMPANY = Commpany_Name # 项目目标生产商
QMAKE_TARGET_DESCRIPTION = Detailed_description_of_the_project # 详细描述
QMAKE_TARGET_PRODUCT = Project_Name # 项目目标的产品名称
QMAKE_TARGET_COPYRIGHT = Copyright(C) 1995-2021 the China # 版权信息
cpp中调用pro中定义变量
QString version = APP_VERSION;
qInfo() << "版本信息:" << version;
序号 | 参数 | 说明 |
---|---|---|
1 | QMAKE_TARGET_COMPANY | 指定项目目标生产商 |
2 | QMAKE_TARGET_DESCRIPTION | 指定项目目标详细描述。 |
3 | QMAKE_TARGET_PRODUCT | 指定项目目标的产品名称 |
4 | QMAKE_TARGET_COPYRIGHT | 指定项目目标的版权信息。 |
3.3 添加配置信息
CONFIG
- CONFIG += 用来指的应用程序的配置信息。
序号 | 参数 | 说明 |
---|---|---|
1 | release | 项目被编译为一个发布的应用程序 |
2 | debug | 项目被编译为一个debug的应用程序,debug和release同时设置的时候,最后面的一个生效 |
3 | debug_and_debug | 项目被编译为debugh和release |
4 | warn_on | 编译器输出尽可能的警告信息 |
5 | c++17 | 支持c++17的标准 |
6 | thread | 支持线程,当config参数包含qt的时候,该值默认 |
7 | no_batch | 关闭 NMake 批处理规则或推理规则的生成。 |
8 | console | 打开终端,目标是一个 Win32 控制台应用程序。正确的包含路径、编译器标志和库将自动添加到项目中。 |
9 | windows | 目标是一个 Win32 窗口应用程序。正确的包含路径、编译器标志和库将自动添加到项目中。 |
生成pdb文件
debug/release断点调试时,报以下错误
首先理解调试的必备条件,无论是VS环境,还是Qt环境下,都需要pdb文件,debug模式下默认生成这个,但是release模式下,不一定会生成这个。
添加以下两行
QMAKE_CXXFLAGS_RELEASE += $$QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO
QMAKE_LFLAGS_RELEASE += $$QMAKE_LFLAGS_RELEASE_WITH_DEBUGINFO
3.4 编译设置
编译目录设置
指定可执行文件的输出目录和名称
DESTDIR = ./ExeDirectory #设置exe存放目录
TARGET = ExeName #设置生成的exe文件名称
注意:
- UI_DIR 、RCC_DIR 、 MOC_DIR 、OBJECTS_DIR 可以认为都是用来存放中间文件,只是存放的中间文件有所不同,不指定的话默认会存放在 .pro 文件所在的路径,显得工程看起来比较乱
序号 | 参数 | 说明 |
---|---|---|
1 | DESTDIR += 指定生成的应用程序的存放目录 | |
2 | TARGET = 指定生成的应用程序的名字 | |
3 | UI_DIR += 用来存放编译的时候 ui 生成的 ui_*.h 文件 | |
4 | RCC_DIR += 存放 .qrc 生成的 qrc_*.h 文件 | |
5 | MOC_DIR += 用来存放 moc 命令转换添加的 Q_OBJECT 的 .h 文件为标准 .h 文件的存放路径 | |
6 | OBJECTS_DIR += 用来存放目标文件 .obj 存放的路径 |
复制dll文件到指定路径
方法1:
DESTDIR = ./TestDemo # 指定生成的应用程序的存放目录
TARGET_PATH= D:\Project\target_path # 定义 target_path 依赖库目录路径
# 定义要复制的多个 DLL 文件路径
DLL_FILES += $${TARGET_PATH}/target1/test1.dll \
$${TARGET_PATH}/target2/test2/*.dll
DLL_FILES += $${TARGET_PATH}/target3/test3.dll
win32:DESTDIR ~= s,/,\\,g # 替换Windows目标路径中的斜杠
# 在构建过程中检查并复制 DLL 到目标文件夹(仅当目标文件夹中不存在同名文件时)
for(FILE, DLL_FILES) {
win32:FILE ~= s,/,\\,g # 替换Windows源路径中的斜杠
TARGET_FILE = $$DESTDIR/$${basename(FILE)}
!exists($$TARGET_FILE) {
QMAKE_POST_LINK += $$QMAKE_COPY $$shell_quote($$FILE) $$shell_quote($$DESTDIR) $$escape_expand(\\n\\t)
}
}
方法2:
TARGET_PATH = D:\Project\target_path # 定义 target_path 依赖库目录路径
DESTDIR = ./TestDemo # 指定生成的应用程序的存放目录
# 定义要复制的多个 DLL 文件路径
DLL_FILES += $${TARGET_PATH}/target1/test1.dll \
$${TARGET_PATH}/target2/test2/*.dll
DLL_FILES += $${TARGET_PATH}/target3/test3.dll
# 将给定文件复制到目标目录,相当于一个函数
defineTest(copyToDestDir) {
files = $$1
dir = $$2
# 替换Windows目标路径中的斜杠
win32:dir ~= s,/,\\,g
for(file, files) {
# 替换Windows源路径中的斜杠
win32:file ~= s,/,\\,g
# 复制命令
QMAKE_POST_LINK += $$QMAKE_COPY $$shell_quote($$file) $$shell_quote($$dir) $$escape_expand(\\n\\t)
}
export(QMAKE_POST_LINK)
}
#复制到指定文件夹
copyToDestDir($$DLL_FILES, $$DEST_DIR)
软件部署
# 定义 Qt 安装目录路径
QT_DIR = C:/Qt/5.15.2/msvc2019_64
# 定义软件名称
QMAKE_TARGET_PRODUCT = ProjectName
# 使用windeployqt.exe部署目标可执行文件
QMAKE_POST_LINK += $$quote($$QT_DIR/bin/windeployqt.exe $$shell_path($$DESTDIR/$$QMAKE_TARGET_PRODUCT.exe))
3.5 pro基本语法
打印信息
打印类+函数名
qDebug() << __FUNCTION__ << endl;
设置变量
pro文件中设置
VAR = "STRING_MESSAGE"
DEFINES += APP_VAR=\\\"$${VAR}\\\" #变量
cpp文件中使用
QString str = (QString)APP_VAR;
添加文件路径
序号 | 参数 | 说明 |
---|---|---|
1 | HEADERS += 用来添加头文件 | 用来添加当前项目的路径; |
2 | SOURCES += 用来添加源文件 | |
3 | FORMS += 用来添加 ui 文件 | |
4 | RESOURCES += 用来添加资源文件 | |
5 | INCLUDEPATH += 用来存放添加头文件的路径 | 一般用在添加第三方 .dll 的时候所需的头文件路径; |
6 | DEPENDPATH += 用来添加依赖相关路径 | |
7 | LIBS += 用来添加库文件 | LIBS += -LC:/Windows/System32/ -luser32 格式为:-L 路径 -l 库名 |
注意:
- 库比较多的时候可以用 \来达到换行目的
- 引用相对路径的库文件的时候,
$$PWD
指的是项目 .pro 文件所在的路径,$$OUT_PWD
指的是编译的目标所在的路径。如果不清楚路径,可以使用message($$PWD)
打印路径查看绝对路径。
参考文献
- qmake:变量手册:https://zhuanlan.zhihu.com/p/639476716