力学笃行(三)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
序号参数说明
1app建立一个应用程序的makefile。这是个默认值,所以如果模板没有被指定,该模板将会被使用。
2lib建立一个库的makefile。
3vcapp建立一个应用程序的Visual Studio项目文件。
4vclib建立一个库的VisualStudio项目文件。
5subdirs这是一个特殊的模板,它可以创建一个能够进入特定目录并且为一个项目文件生成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;
序号参数说明
1QMAKE_TARGET_COMPANY指定项目目标生产商
2QMAKE_TARGET_DESCRIPTION指定项目目标详细描述。
3QMAKE_TARGET_PRODUCT指定项目目标的产品名称
4QMAKE_TARGET_COPYRIGHT指定项目目标的版权信息。

3.3 添加配置信息

CONFIG

  • CONFIG += 用来指的应用程序的配置信息。
序号参数说明
1release项目被编译为一个发布的应用程序
2debug项目被编译为一个debug的应用程序,debug和release同时设置的时候,最后面的一个生效
3debug_and_debug项目被编译为debugh和release
4warn_on编译器输出尽可能的警告信息
5c++17支持c++17的标准
6thread支持线程,当config参数包含qt的时候,该值默认
7no_batch关闭 NMake 批处理规则或推理规则的生成。
8console打开终端,目标是一个 Win32 控制台应用程序。正确的包含路径、编译器标志和库将自动添加到项目中。
9windows目标是一个 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 文件所在的路径,显得工程看起来比较乱
序号参数说明
1DESTDIR += 指定生成的应用程序的存放目录
2TARGET = 指定生成的应用程序的名字
3UI_DIR += 用来存放编译的时候 ui 生成的 ui_*.h 文件
4RCC_DIR += 存放 .qrc 生成的 qrc_*.h 文件
5MOC_DIR += 用来存放 moc 命令转换添加的 Q_OBJECT 的 .h 文件为标准 .h 文件的存放路径
6OBJECTS_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;

添加文件路径

序号参数说明
1HEADERS += 用来添加头文件用来添加当前项目的路径;
2SOURCES += 用来添加源文件
3FORMS += 用来添加 ui 文件
4RESOURCES += 用来添加资源文件
5INCLUDEPATH += 用来存放添加头文件的路径一般用在添加第三方 .dll 的时候所需的头文件路径;
6DEPENDPATH += 用来添加依赖相关路径
7LIBS += 用来添加库文件LIBS += -LC:/Windows/System32/ -luser32
格式为:-L 路径 -l 库名

注意:

  • 库比较多的时候可以用 \来达到换行目的
  • 引用相对路径的库文件的时候,$$PWD 指的是项目 .pro 文件所在的路径,$$OUT_PWD 指的是编译的目标所在的路径。如果不清楚路径,可以使用 message($$PWD) 打印路径查看绝对路径。

参考文献

  1. qmake:变量手册:https://zhuanlan.zhihu.com/p/639476716
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小老鼠不吃猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值