Visual studio + Qt 项目配置管理

Visual studio + Qt 项目配置管理

1.本机顺利安装 vs 和 Qt 软件

​ 并且设置好Qt 的环境变量比如

E:\Qt\Qt5.9.8\5.9.8\msvc2017_64\bin
E:\Qt\Qt5.9.8\5.9.8\msvc2017_64\lib
E:\Qt\Qt5.9.8\5.9.8\msvc2017_64\include
//这里是你电脑上Qt的路径,每台电脑不一样

2.vs 要安装扩展

安装完之后,关闭vs 电脑会自动安装插件。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

3.创建一个Qt项目测试一下

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Qt项目就配置成功了。

3.调试动态库

​ 创建了一个 动态库项目,但是visual studio中我无法直接调试动态库项目,可以新建一个 测试 EXE 项目 来调用 databaseSDKLib.dll,然后在 databaseSDKLib 里设置断点进行调试。

1. 创建测试项目
  1. 在 Visual Studio 里创建一个新的控制台项目 (Console App)
    • 文件 (File) → 新建 (New) → 项目 (Project)
    • 选择 C++ 控制台应用 (Console App)
    • 命名为 TestApp
  2. 让 EXE 依赖创建的的 DLL:
    • 右键 TestApp,选择 添加 (Add) → 现有项 (Existing Item)
    • 添加 databaseSDKLib.h(DLL 的头文件)
    • TestApp源文件 (Source Files) 里添加 main.cpp 并调用你的 DLL:

​ 3.配置 TestApp 依赖 databaseSDKLib

  • 右键 TestApp,选择 属性 (Properties)

  • “VC++ 目录” → “包含目录 (Include Directories)” 里添加 databaseSDKLib 的头文件路径

  • “VC++ 目录” → “库目录 (Library Directories)” 里添加 databaseSDKLib.lib 的路径

  • 在 “链接器 (Linker) → 输入 (Input)”里,在附加依赖项 (Additional Dependencies)

    添加:

    databaseSDKLib.lib
    

​ 4.设置 databaseSDKLib.dll 的运行路径

  • 右键 TestApp,选择 “属性 (Properties)”

  • 在 “调试 (Debugging)” → “环境 (Environment)” 添加:

    PATH=D:\your_dll_folder;%PATH%
    

    这样,运行时就能找到

    databaseSDKLib.dll
    

​ 5.运行 TestApp 并调试

  • 设置 databaseSDKLib 断点
  • 右键 TestApp,点击 “设为启动项目 (Set as Startup Project)”
  • F5 运行调试,如果 TestApp 调用了 DLL,VS 就会跳转到 databaseSDKLib 的代码里。

​ 添加引用

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

​ ✅ 如果 动态库依赖其他第三方库, TestApp 也需要添加这些库的依赖

​ ✅ 需要在 TestApp 中配置头文件目录、库文件目录和 DLL 的路径

​ ✅ 确保在调试时,所有依赖都被正确加载

4.releas模式下也可以进行断点调试。

5.Visual Studio 配置 C++ 项目,需要设置多个关键参数

1. C/C++ 预处理和编译相关配置

(1)附加包含目录 (Include Directories)

  • 路径设置项目属性 → C/C++ → 常规 → 附加包含目录

  • 作用:告诉编译器在哪里寻找头文件 (.h / .hpp)。

  • 示例:

    D:\Boost\include
    
  • 用途:

    • 当你的项目依赖于外部库(如 Qt、Boost)时,需要指定这些库的头文件路径。
    • 例如,代码 #include <QtCore/QObject>,编译器会去 D:\Qt\5.15.2\msvc2019_64\include 目录下寻找 QObject 头文件。

2. 链接器(Linker)相关配置

(2)库目录 (Library Directories)

  • 路径设置项目属性 → 链接器 → 常规 → 附加库目录

  • 作用:告诉链接器 (link.exe) 在哪里寻找 .lib 静态库或动态库的导入库。

  • 示例:

    plaintext复制编辑D:\Qt\5.15.2\msvc2019_64\lib
    D:\Boost\lib
    
  • 用途:编译 .cpp 文件时只需要头文件,但链接时需要 .lib 文件,所以必须指定库所在路径。

(3)附加依赖项 (Additional Dependencies)

  • 路径设置项目属性 → 链接器 → 输入 → 附加依赖项

  • 作用:指定需要链接的 .lib 文件(编译时链接)。

  • 示例

    plaintext复制编辑Qt5Core.lib
    Qt5Widgets.lib
    Boost_system.lib
    
  • 用途:

    • 当你使用 databaseSDKLib 这样的库时,最终的应用程序需要链接 databaseSDKLib.lib,否则无法解析库中的函数。

3. 运行时配置

(5)环境变量 (Environment)

  • 路径设置项目属性 → 调试 → 环境

  • 作用:运行时加载 .dll 文件(动态库)。

  • 示例:

    PATH=D:\Qt\5.15.2\msvc2019_64\bin;%PATH%
    
  • 用途:

    • 如果 TestApp.exe 运行时找不到 Qt5Core.dll,就需要将 Qt 运行库的 bin 目录添加到 PATH 变量。

4. 代码生成和优化

  • 路径设置项目属性 → C/C++ → 代码生成 → 运行时库

  • 选项

    选项说明
    /MD使用多线程动态库(msvcrt.dll),适用于动态链接
    /MT使用多线程静态库(libcmt.lib),适用于静态链接
    /MDd/MD 的调试版本
    /MTd/MT 的调试版本
  • 用途

    • 如果你用 /MD 编译 databaseSDKLib,那么 TestApp 也必须用 /MD,否则可能会有符号冲突。

5. 预处理器宏

(7)预处理器定义 (Preprocessor Definitions)

  • 路径设置项目属性 → C/C++ → 预处理器 → 预处理器定义

  • 作用:定义宏,用于控制编译行为。

  • 示例

    _CRT_SECURE_NO_WARNINGS; WIN32; QT_CORE_LIB
    
  • 用途

    • _CRT_SECURE_NO_WARNINGS 让 MSVC 忽略 scanf() 之类的安全警告。
    • WIN32 表示 Windows 平台,QT_CORE_LIB 表示 Qt Core 模块。

6. 编译器优化

(8)优化选项 (Optimization)

  • 路径设置项目属性 → C/C++ → 优化

  • 选项

    选项说明
    /O1最小化代码大小
    /O2最大化运行速度
    /Od禁用优化(适用于调试)
    /Oy省略帧指针(仅适用于 Release)

7. 其他重要配置

(9)输出目录 (Output Directory)

  • 路径设置项目属性 → 常规 → 输出目录

  • 作用:指定编译生成的 .exe.dll 放在哪里。

  • 示例

    $(SolutionDir)bin\$(Configuration)\
    
  • 用途让 Debug 和 Release 版本分开放,避免混淆。

(10)中间目录 (Intermediate Directory)

  • 路径设置项目属性 → 常规 → 中间目录

  • 作用:存放编译过程中产生的 .obj 文件。

  • 示例

    $(SolutionDir)build\$(Configuration)\
    
  • 用途避免不同配置的 .obj 文件相互覆盖。

配置项作用
附加包含目录指定头文件搜索路径
库目录指定 .lib 文件搜索路径
附加依赖项指定需要链接的 .lib 文件
运行时库选择 /MD(动态库)或 /MT(静态库)
环境变量让程序能找到 .dll
预处理器定义控制编译行为,如 _CRT_SECURE_NO_WARNINGS
输出目录指定 .exe.dll 存放路径
中间目录指定 .obj 临时文件存放路径

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

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

相关文章

通过 Python 爬虫提高股票选股胜率

此贴为Python爬虫技术学习贴 在股票中&#xff0c;即便有了选股规则&#xff0c;从5000多只股票中筛选出符合规则的股票也是十分困难的&#xff0c;于是想通过爬虫来实现自动化的快速选股。全文用GP代替股票 实现方案 1、指定两套规则&#xff0c;第一套弱约束&#xff0c;第…

SpringCloud带你走进微服务的世界

认识微服务 随着互联网行业的发展&#xff0c;对服务的要求也越来越高&#xff0c;服务架构也从单体架构逐渐演变为现在流行的微服务架构。这些架构之间有怎样的差别呢&#xff1f; 单体架构 单体架构&#xff1a;将业务的所有功能集中在一个项目中开发&#xff0c;打成一个…

FastAPI复杂查询终极指南:告别if-else的现代化过滤架构

title: FastAPI复杂查询终极指南:告别if-else的现代化过滤架构 date: 2025/3/14 updated: 2025/3/14 author: cmdragon excerpt: 本文系统讲解FastAPI中复杂查询条件的构建方法,涵盖参数验证、动态过滤、安全防护等18个核心技术点。通过引入策略模式、声明式编程等技术,彻…

Ubuntu 22.04使用pigz多线程快速解压/压缩文件

最近搞项目&#xff0c;资料太大&#xff0c;解压时间太久&#xff0c;于是想办法解决。 开贴记录。 1.安装pigz sudo apt install pigz 2.解压资料 解压命令为 tar --use-compress-programpigz -xvpf ***.tar.gz 将最后的部分***.tar.gz换成你自己的文件即可 例如 ti…

Amazon Quantum Ledger Database (QLDB):革新数据可信记录的终极解决方案

在数字化浪潮中&#xff0c;企业数据的安全性与可信性成为核心挑战。无论是金融交易的透明审计、供应链的全程追踪&#xff0c;还是医疗记录的真实性验证&#xff0c;如何确保数据不可篡改且可追溯&#xff0c;已成为企业亟待解决的难题。Amazon Quantum Ledger Database (QLDB…

日本IT|AWS工作内容及未来性、以及转职的所需资质和技能

AWSとは AWSはAmazon Web Services&#xff08;アマゾンウェブサービス&#xff09;の略称です。 名称から分かるとおり、ネットを通じた通販などを事業として行っているAmazon.com社がクラウドサービスとして運営しています。 本来であれば自分たちでインフラ環境を構築する…

Conda+jupyterlab

文章目录 1、Conda1.1、基本介绍1.2、conda安装1.3、conda常用命令1.3.1、基本命令1.3.2、环境管理 2、Jupyterlab2.1、基本介绍2.2、安装使用 3、pycharm中使用conda 1、Conda 1.1、基本介绍 Conda 是一个开源的包管理和环境管理工具&#xff0c;适用于 Python 及其他编程语…

Vue 项目中 CDN 引入的利弊及解决方案

在Vue项目中&#xff0c;引入到工程中的所有js、css文件&#xff0c;编译时都会被打包进vendor.js&#xff0c;浏览器在加载该文件之后才能开始显示首屏。若是引入的库众多&#xff0c;那么vendor.js文件体积将会相当的大&#xff0c;影响首屏的体验。通过调试发送时间主要消耗…

拥有一台云服务器能做什么呢?

拥有一台云服务器就像拥有了一台24小时在线的远程电脑&#xff0c;你可以通过互联网随时随地管理它。它的用途非常广泛&#xff0c;无论是个人学习、开发测试&#xff0c;还是企业级应用部署&#xff0c;都能发挥重要作用。以下是常见的应用场景&#xff0c;按需求分类整理&…

PHP 在 if 判断时由于运算符优先级导致 false 的问题

首先来看一段代码&#xff1a; $price 187.50;if (!is_numeric($price) || $price < 0 || ($price * 100 > 1000000)) {echo "价格错误&#xff1a;$price\n"; } else {echo "价格正确&#xff1a;$price\n"; }乍一看是不是认为并没有什么问题&…

从零基础到能独立设计单片机产品,一般需要经历哪些学习阶段?

相信很多人&#xff0c;内心都有“钢铁侠”的幻想&#xff0c;成为能写程序&#xff0c;能设计硬件&#xff0c;能设计结构&#xff0c;能焊接的全能型人才。 上次徐工问我&#xff0c;如果你财富自由了&#xff0c;想去做啥&#xff1f; 我说出来&#xff0c;可能大家都不信&a…

Liunx启动kafka并解决kafka时不时挂掉的问题

kafka启动步骤 先启动zookeeper&#xff0c;启动命令如下 nohup ./zookeeper-server-start.sh /home/kafka/kafka/config/zookeeper.properties > /home/kafka/kafka/zookeeper.log 2>&1 &再启动kafka&#xff0c;启动命令如下 nohup ./kafka-server-start.sh…

使用STM32CubeMX配置定时器中断实现LED每秒闪烁一次(STM32G070CBT6)

说明&#xff1a; 本案例采用的定时器3&#xff08;TIM3&#xff09;实现&#xff0c;使用其他定时器是一样配置。 如何新建一个工程以及如何配置LED的端口&#xff0c;请查看前面文章&#xff1a;使用STM32CubeMX实现LED灯每秒闪烁一次&#xff08;STM32G070CBT6单片机&…

暴力破解Excel受保护的单元格密码

暴力破解Excel受保护的单元格密码 分享一个暴力破解Excel受保护的单元格密码的方法 第一步 在Excel中按下Alt F11&#xff0c;打开Visual Basic for Applications&#xff08;VBA&#xff09;编辑器。 第二步 在VBA编辑器中&#xff0c;点击插入菜单&#xff0c;选择模块…

Git常用操作之GitLab

Git常用操作之GitLab 小薛博客官网&#xff1a;小薛博客Git常用操作之GitLab官方地址 1、GitLab安装 https://gitlab.cn/install/ 1、Docker安装GitLab https://docs.gitlab.cn/jh/install/docker.html 1、设置卷位置 在设置其他所有内容之前&#xff0c;请配置一个新的…

pgsql创建新用户并赋只读权限

在 PostgreSQL 中&#xff0c;为新用户赋予只读权限的步骤如下&#xff1a; —### 1. 创建新用户首先&#xff0c;创建一个新用户&#xff08;角色&#xff09;&#xff0c;并设置密码&#xff1a;sqlCREATE ROLE 用户名 WITH LOGIN PASSWORD 密码;例如&#xff1a;sqlCREATE R…

数据结构与算法——算法3 面试常用排序算法

首先了解排序算法性能和优缺点 然后了解快排 和堆排序的方法。 可以参考如下的博客 八大排序(超详解附动图源码)

linux root丢失修改密

在RHEL7下重置密码 第一种方式&#xff1a;光驱进入急救模式 //做之前最好 selinuxdisabled Conntinue 然后chroot /mnt/sysimag 然后编辑/etc/shadow文件 第二种方式&#xff1a; 1&#xff1a;编辑启动菜单按e,找到linux16行&#xff0c;在行尾加入 init/bin/sh,同时在…

数据类设计_图片类设计之3_半规则图类设计(前端架构基础)

前言 学的东西多了,要想办法用出来.C和C是偏向底层的语言,直接与数据打交道.尝试做一些和数据方面相关的内容 引入 接续上一篇讨论半规则图类型的设计 半规则图的定义 什么是半规则图?笔者看见了一些似乎规则又不是太规则的图形,例如带圆角的矩阵,在页面上找一个圆角框 为了…

Qt 信号与槽机制

1. 信号 和 槽 Qt 信号与槽机制 是一种用于对象间通信的低耦合设计模式&#xff0c;核心思想是&#xff1a;当某个信号触发&#xff0c;自动调用预先关联的处理函数&#xff08;槽函数&#xff09;。 在 Qt 中&#xff0c;如果一个类需要使用信号与槽机制&#xff0c;则该类必…