Qt creator中项目的构建配置和运行设置

使用 Qt Creator 集成开发环境构建和运行程序是一件非常简单的事情,一个按钮或者一个快捷键搞定全部,大家已经都了解了。但是,这些看起来简单的过程,背后到底发生了什么呢?

点击 Qt Creator 项目模式,可以看到当前项目的配置界面:
在这里插入图片描述

在打开具体的项目之后,Qt Creator 的项目模式才会变得可用。对于打开的项目,比如 HelloWorld 项目,可配置的内容如上图左侧显示的五大类,分别是“Build & Run(构建和运行)”“编辑器”“代码风格”“依赖关系”“Clang Static Analyzer(Clang静态分析)”,最常用的就是“Build & Run”。

对于每个 Qt 套件,又可以分别配置构建时环境、命令和运行时环境、命令。如果需要给生成的可执行程序如 *.exe 附加命令参数,那就可以点击 Qt 套件名称下方的“Run”设置,给可执行程序附加参数。下面重点关注“Build”设置。

在“Build”设置里,上方组合框里可以选择构建类型(Debug、Release 或者 Profile),并且可以自己添加新的构建类型(一般没必要)。

影子构建(Shadow build)

接下来“概要”里面,Qt Creator 默认使用影子构建方式(Shadow build),这种构建项目的方式是将构建过程中的中间文件和目标程序都放到独立的构建目录中,实现源代码目录和构建目录的彻底分离,这对程序源代码的发布很方便,不会将构建过程中的中间文件混杂进来。

对于项目 HelloWorld ,它的源代码路径是 D:\QtDemo\HelloWorld,而上图中影子构建的目录是在 D:\QtDemo\build-HelloWorld-Desktop_Qt_5_9_0_MinGW_32bit-Debug,源码文件夹和构建文件夹都在父文件夹 QtDemo 里。

影子构建目录的命名规则是:build-项目名-构建套件名-构建类型 。示范的项目名 HelloWorld,套件名 Desktop Qt 5.9.0 MinGW 32bit,构建类型为 Debug,合成之后的构建目录里不能带空格和点号,所以把空格和点号都换成下划线,得到 build-HelloWorld-Desktop_Qt_5_9_0_MinGW_32bit-Debug 。项目构建时生成的中间文件和最终的目标程序都可以在影子构建目录里找到。

构建步骤

接着是“构建步骤”,前面提到过 qmake 编译程序的三板斧,因为 pro 文件已经由 Qt Creator 生成好了,所以这时候编译程序只需要剩下的两板斧:
①用 qmake 生成 Makefile 到构建目录;
②在构建目录里面执行 make (mingw32-make) 。

对于这两板斧的细节可以点开 qmake 和 Make 两行右边的详情进行查看,这里不额外截图了,仅解释一下上图中 qmake 命令的选项参数:

-r选项是指递归检查项目文件夹的意思;
-spec win32-g++选项参数是指使用 win32-g++ 定制脚本来生成 Makefile,对于不同的编译器和操作系统平台会使用不同的定制脚本,win32-g++ 是专门针对 Windows 系统 MinGW 编译环境的定制脚本(实际的定制脚本位于 QTDIR/mkspecs/win32-g++ 文件夹里);
"CONFIG+=debug"是指生成 debug 类型的目标程序,对于优化发行版,对应的就是 “CONFIG+=release”,如果这两个 CONFIG 都不加,那么默认生成 release 类型的目标程序。

查看项目构建和项目运行时的实际情况

关于 Qt 项目构建的设置暂时介绍这些,接下来我们看看关于项目构建和项目运行时的实际情况。回到 Qt Creator 编辑模式,点击最下面一排输出面板里的“编译输出”面板,可以看到生成项目过程中的编译、链接命令:
在这里插入图片描述
Qt Creator 实际使用的编译链接命令比我们之前演示的编译链接命令复杂太多了,之前使用的是极度精简的命令。如果项目的编译链接没有出问题,不用太在意“编译输出”面板里的东西,如果编译链接过程出错了,就需要查看“编译输出”面板里的问题了。虽然 Qt Creator 编译链接命令复杂,但大致过程和《Qt .ui文件的使用》最后那张生成过程图是类似的。

与“编译输出”面板相比,“应用程序输出”面板更为常用,对于调试信息的输出、打印到命令行的输出等,Qt Creator 都会捕捉到,并显示到“应用程序输出”面板,如下图所示:
在这里插入图片描述
“应用程序输出”面板标题栏位置还有些小按钮,感兴趣的读者可以自己试试,有清空输出内容、重新运行程序、停止当前运行程序之类快捷功能。

运行设置

最后说明一下目标程序的运行环境,如果希望从集成开发环境为生成的目标程序加命令行参数,那么需要用到项目模式的“运行设置”:
在这里插入图片描述
点击“Run”按钮,就会进入运行配置界面,可以看到上图几个关键的路径和参数设置:
路径/参数 说明
Executable 可执行程序路径,或叫目标程序路径,生成的 exe 文件为 D:\QtDemo\build-HelloWorld-Desktop_Qt_5_9_0_MinGW_32bit-Debug\debug\HelloWorld.exe,如果进入该路径,直接运行 exe 文件,那么 exe 文件默认是无法正常运行的,因为缺少运行时依赖的动态库和环境变量。需要从开始菜单启动 Qt 命令行,然后从命令行启动 exe 才能正常运行。

Command line arguments 目标程序的命令行参数,可以在这里手动添加命令行参数,这样每次 Qt Creator 启动目标程序时都会附加该参数。

Working directory 目标程序工作路径,这里需要特别注意,目标程序既不是从源代码路径启动,也不是从它自己的可执行程序路径启动, 而是从工作路径启动,这个工作路径默认与影子构建路径一样。 因此,如果在程序代码里面使用相对路径操作文件,如 “data.db”,那么这个文件应该放到工作路径,这样目标程序从 Qt Creator 启动时,才能找到相对路径里的文件。

运行设置里面还有一个重要的设置就是 Run Environment,运行时环境变量的设置,我们标出其中重要的变量如下:
在这里插入图片描述
读者一般对 PATH 环境变量比较熟悉,就是大量可执行程序 *.exe 和依赖库 *.dll 的路径,程序启动时会从 PATH 环境变量找寻依赖的 dll 并加载。Qt 也为 PATH 添加了自己的依赖库路径,新增的有三个路径:
D:\Qt\5.9\mingw53_32\lib;
D:\Qt\5.9\mingw53_32\bin;
D:\Qt\Tools\mingw530_32\bin;

第一个是编译时依赖库的路径,第二个是 Qt 库自己可执行程序和动态库路径,第三个是 MinGW 编译环境的可执行程序和动态库路径。

除了 PATH 环境变量,Qt 库专属的 QTDIR 环境变量也很重要,Qt 程序运行时不仅依赖 *.dll ,还依赖 Qt 库里面的插件、翻译文件、设置文件等等,QTDIR 是 Qt 库的总目录,Qt 程序根据这个总目录自动去找寻子文件夹,子文件夹会包含 Qt 程序运行时依赖的其他东西。

如果读者希望把 Qt 的依赖库集成到操作系统的环境变量,那么不仅要设置 PATH,还要设置正确的 QTDIR。QTIDR 通常就是 qmake.exe 所在文件夹的父文件夹,比如 qmake.exe 位于 D:\Qt\5.9\mingw53_32\bin,那么 QTDIR 就是 D:\Qt\5.9\mingw53_32 。
————————————————
原文链接:https://blog.csdn.net/sksukai/article/details/105353483

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/101972.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用PHPStudy在本地快速建立网站并实现局域网外访问(无公网IP)

文章目录 使用工具1. 本地搭建web网站1.1 下载phpstudy后解压并安装1.2 打开默认站点,测试1.3 下载静态演示站点1.4 打开站点根目录1.5 复制演示站点到站网根目录1.6 在浏览器中,查看演示效果。 2. 将本地web网站发布到公网2.1 安装cpolar内网穿透2.2 映…

晨启,MSP430开发板,51开发板,原理图,PCB图

下载:https://github.com/xddun/blog_code_search

【优选算法】—— 前缀和算法

前言: 本期,我将要带大家学习的是有关前缀和算法的学习!!! 目录 (一)什么是前缀和算法 (二)题目讲解 1、【模板】前缀和 2、【模板】二维前缀和 3、 和可被K整除的…

数学建模竞赛常用代码总结-PythonMatlab

数学建模过程中有许多可复用的基础代码,在此对 python 以及 MATLAB 中常用代码进行简单总结,该总结会进行实时更新。 一、文件读取 python (pandas) 文件后缀名(扩展名)并不是必须的,其作用主要一方面是提示系统是用…

构建高效实时数据流水线:Flink、Kafka 和 CnosDB 的完美组合

当今的数据技术生态系统中,实时数据处理已经成为许多企业不可或缺的一部分。为了满足这种需求,Apache Flink、Apache Kafka和CnosDB等开源工具的结合应运而生,使得实时数据流的收集、处理和存储变得更加高效和可靠。本篇文章将介绍如何使用 F…

NIFI实现数据库数据增量同步

说明 nifi版本:1.23.2(docker镜像) 需求背景 将数据库中的数据同步到另一个数据库中,要求对于新增的数据和历史有修改的数据进行增量同步 模拟数据 建表语句 源数据库和目标数据库结构要保持一致,这样可以避免后…

解决报错之org.aspectj.lang不存在

一、IDEA在使用时,可能会遇到maven依赖包明明存在,但是build或者启动时,报找不存在。 解决办法:第一时间检查Setting->Maven-Runner红圈中的√有没有选上。 二、有时候,明明依赖包存在,但是Maven页签中…

【算法训练-链表 五】【求和】:链表相加(逆序)、链表相加II(顺序)

废话不多说,喊一句号子鼓励自己:程序员永不失业,程序员走向架构!本篇Blog的主题是【链表相加】,使用【链表】这个基本的数据结构来实现,这个高频题的站点是:CodeTop,筛选条件为&…

Mybatis复杂查询及动态SQL

文章目录 一. 较复杂的查询操作1. 参数占位符#{}和${}2. SQL注入3. like查询4. resultType与resultMap5. 多表查询5.1. 一对一表映射5.2. 一对多表映射 二. 动态SQL1. if标签2. trim标签3. where标签4. set标签5. foreach标签 本篇中使用的数据表即基础映射类都是基于上一篇博客…

蓝牙服务功能

前言 这阵子用到蓝牙比较多,想写一个专栏专门讲解蓝牙协议及其应用,本篇是第二篇文章,讲解蓝牙服务。 参考网上各大神文章,及瑞萨的文章,参考GPT,并且加入了一些本人的理解。 图片部分源自网络&#xff…

Systrace分析App性能学习笔记

学习Gracker Systrace系列文章,总结使用Systrace分析App性能的方法。推荐想通过Systrace学习Framework的同学,去看原文。 文章目录 概述Systrace使用流程Systrace 文件生成图形方式(不推荐)命令行方式 Systrace分析快捷键使用帧状态线程状态查看线程唤醒…

Qt打开及创建项目,运行程序(1)

安装之后, 1.文件->新建文件或项目 2.Application->Qt Widgets Application 3.自己设置名称和路径 4.这一步非常非常重要,要选择编译器,(MinGW是可以在Qt里用,如果想与VS交互,要选择MSVC&#xff09…