目录
三、QtCreator中三种不同编译版本 debug、release、profile 的区别
一、运行文件附带调试输出窗口
前因:很多时候当我们发布程序阶段,我们会遇到程序双击无法运行也不报错提示(开发机器上一切正常),都不知道发生了什么,甚至任务管理器可以看到运行了但是没有界面弹出来,此时就需要在项目的pro文件中加上一行CONFIG += console,带界面的程序也会自动弹出调试窗口打印输出信息,方便找问题,一般没法正常运行的程序都会打印一些提示信息缺啥之类的。
TEMPLATE = app
MOC_DIR = temp/moc
RCC_DIR = temp/rcc
UI_DIR = temp/ui
OBJECTS_DIR = temp/obj
#就是下面这行用来设置运行文件附带调试输出窗口
CONFIG += console
加了运行的效果会有控制台弹出:
平时写代码的时候,如果不想注释上面那行代码 ,但又觉得这个弹出很烦,想要关闭的话,按以下操作即可:
等再次运行的时候就不会有窗口弹出了。
二、QT INCLUDEPATH的作用
在qt项目中的.pro或.pri中加入INCLUDEPATH语句,表示在我们的这个项目文件之中要用到其他项目文件中的文件时,可以从该目录下开始搜索(默认是先从本项目的目录下开始搜索的)
INCLUDEPATH += /root/pro/tcpSever
没加之前,你引用的头文件时可能是这样的
#include "/root/pro/tcpSever/udpsender.h"
加了INCLUDEPATH之后,你引用头文件的时候就只用
#include "udpsender.h"
是不是特别简单明了啦,哈哈哈
补充:
在.pro文件里加入一下语句可以把一些临时文件.o啊.moc等文件放到一个目录下,方便文件的管理,清晰明了
#禁用qdebug打印输出
DEFINES += QT_NO_DEBUG_OUTPUT
#自定义define变量 可以在整个项目中使用
#pro文件可以这样判断 contains(DEFINES, videovlc) {}
#代码文件可以这样判断 #ifdef videovlc
DEFINES += videovlc1 videoffmpeg
#关闭编译警告提示 眼不见为净
CONFIG += warn_off
#指定编译生成的文件到temp目录 分门别类存储
MOC_DIR = temp/moc
RCC_DIR = temp/rcc
UI_DIR = temp/ui
OBJECTS_DIR = temp/obj
#指定编译生成的可执行文件到bin目录
DESTDIR = bin
三、QtCreator中三种不同编译版本 debug、release、profile 的区别
- debug调试模式,编译后的可执行文件很大,带了很多调试符号信息等,方便开发阶段调试的时候进入具体的堆栈查看值。会打开所有的断言,运行阶段性能差速度慢,可能会有卡顿感觉。
- release发布模式,编译后的可执行文件很小,不带任何调试符号信息,一般用于打包发布程序。由于经过了各种优化,会关闭所有断言,运行阶段性能最好,如果有卡顿那肯定是你的程序问题。
- profile概述模式,编译后的可执行文件比debug小很多比release大一点,带有部分调试符号信息,在debug和release之间取一个平衡,兼顾性能和调试,性能更优但是又方便调试。
- 使用Qt5.7版本对应三种模式编译的空白窗体程序大小:debug(1319kb)、release(24kb)、profile(90kb)。
- debug链接的库是带d结尾的,release和profile链接的库是不带d结尾的,很多人以为profile链接的是带d结尾的其实是错误的。
- 新的Qt在线安装程序在安装的时候,可以勾选是否安装debug调试库(对应lib目录下一堆带d结尾的文件),以前的版本是默认都安装,现在可选安装以便减少体积。
- 无论是否安装了debug调试库,你都可以选择debug模式生成对应debug的文件,这个不知道怎么做到的。
四、QtCreator中pro项目文件格式说明
名称 | 说明 |
---|---|
QT += core gui | 添加本项目中需要的模块,影响后面代码文件include的时候自动弹出下拉选择,如果pro文件没有引入该模块则无法自动语法提示,一般打包发布的时候对应动态库文件比如 Qt5Core.dll。 |
TARGET = xxx | 生成最后目标文件的名字,可以是可执行文件或者库文件。 |
TEMPLATE = app | 项目程序的生成模式,默认是app表示生成可执行文件程序,如果是动态库项目就是 TEMPLATE = lib。 |
CONFIG += qaxcontainer | 引入一些配置,在Qt4的时候还用来引入一些模块,其中有部分改成了QT += 方式引入,比如Qt5引入本地activex控件支持改成了QT += qaxcontainer。 |
DEFINES += xxx | 项目中自定义的一些定义,可以在代码文件中识别,通常用来定义一些不同平台的处理,根据项目需要自己定义任何标识。 |
HEADERS += head.h | 项目中用到的头文件,一般拓展名是.h,可以写在一行也可以分行写,分行要用 \ 斜杠结束。 |
SOURCES += main.cpp | 项目中用到的实现文件,一般拓展名是.cpp,可以写在一行也可以分行写,分行要用 \ 斜杠结束。 |
FORMS += Form.ui | 项目中用到的UI文件,一般拓展名是.ui,可以写在一行也可以分行写,分行要用 \ 斜杠结束。 |
RESOURCES += main.qrc | 项目中用到的资源文件,可以多个,写代码使用对应资源文件中的文件时候务必记得资源文件中的前缀。 |
LIBS += -L$$PWD/ -lavformat -lavcodec | 项目中编译时候链接依赖的库,一般是 .lib .a .dylib 文件,可以写在一行,省略文件名的lib打头部分,也可以分多行绝对路径和全名称。 |
DESTDIR += $$PWD/bin | 目标生成路径,$$PWD表示当前目录,一般建议生成的最终文件重定向到另外目录存放,好找,不然一堆临时文件在里面有时候文件太多好难找。 |
INCLUDEPATH += $$PWD/include | 工程需要的头文件,指定整个目录,写代码的时候找到的话会自动下拉。 |
DEPENDPATH += | 工程的依赖路径,用的比较少,一般涉及到引入链接库的时候可能需要。 |
include($$PWD/3rd.pri) | 引入pri模块文件,pri最大的好处就是分目录管理文件,通用的轮子模块可以放到一个目录下,然后用pri统一管理,可以给多个项目公用。 |