当前位置: 首页 > news >正文

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 临时文件存放路径

相关文章:

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的路径&#xff0c;每台电脑不一样…...

直装永久授权,最新专业版集成VB7

无论是学生、教师还是职场工作人员&#xff0c;办公软件在日常工作和学习中都是不可或缺的重要工具。在众多办公软件中&#xff0c;微软的Microsoft Office和金山软件的WPS Office最常用的选择。对于许多使用要求不高的小伙伴而言&#xff0c;WPS Office因其易用性和免费版本的…...

AI数字人| Fay开源项目、UE5数字人、本地大模型

数字人实践教程 本教程主要是讲如何在本地UE部署Fay数字人的开源框架。 最终效果可以与人进行自然语言的对话&#xff0c;花了大概10个h的时间到&#xff0c;踩了很多坑&#xff0c;同样想实现的朋友可以作为参考 参考文档&#xff1a;Fay 数字人开源框架 - 飞书云文档 官方的教…...

【网络编程】同步和异步、阻塞和非阻塞,I/O和网络I/O

十、基于I/O模型的网络开发 10.1 同步和异步 对于多个线程而言&#xff0c;同步、异步就是线程间的步调是否要一致、是否要协调&#xff1a;要协调线程 之间的执行时机就是线程同步&#xff0c;否则就是异步。 对于一个线程的请求调用来讲&#xff0c;同步和异步的区别是是否…...

第本章:go 切片

注意&#xff1a; 切片必须要初始化 才能使用 &#xff0c;切片是引用类型 a :[]int{} // 这上叫始化 此时并没有申请内存 // 如果要追加值的话&#xff1a; append ints : append(a, 1, 2, 3)a : make([]int,5) // 声明切片类型var a []string //声明一…...

VsCode导入时选择相对路径

自动导入时总是以db://开头了&#xff0c;而我们通常需要的是相对路径&#xff0c;对VsCode进行如下设置&#xff1a; 打开 VSCode 设置&#xff1a; 使用快捷键 Ctrl ,&#xff08;Windows/Linux&#xff09;或 Cmd ,&#xff08;Mac&#xff09;。 或者在菜单栏中选择 …...

CarPlanner:用于自动驾驶大规模强化学习的一致性自回归轨迹规划

25年2月来自浙大和菜鸟网络的论文“CarPlanner: Consistent Auto-regressive Trajectory Planning for Large-scale Reinforcement Learning in Autonomous Driving”。 轨迹规划对于自动驾驶至关重要&#xff0c;可确保在复杂环境中安全高效地导航。虽然最近基于学习的方法&a…...

Vue3:本地启动Vue3项目失败,报not found xxx moudel

一、情况描述 我这边是从git上下载的一份可用代码 是之前在公司上传的 于是&#xff0c;在加clone到本地。继续开发 get到项目后&#xff0c;我先进行了&#xff1a;npm install&#xff0c;也没显示报错。 启动的时候报错。 二、解决 rm -rf node_modules npm cache clean…...

nodejs去除本地文件html字符

说明&#xff1a;我希望用nodejs 写一个小工具&#xff0c;去除本地txt文件中的html字符&#xff0c;去除字符后生成新的文件&#xff0c;同样保存在桌面 文件的具体位置是C:\Users\Administrator\Desktop\file.txt step1:C:\Users\Administrator\WebstormProjects\untitled4\f…...

dify部署

https://github.com/langgenius/dify 介绍 Dify 是一款开源的大语言模型(LLM) 应用开发平台。它融合了后端即服务&#xff08;Backend as Service&#xff09;和 LLMOps 的理念&#xff0c;使开发者可以快速搭建生产级的生成式 AI 应用。Dify 内置了构建 LLM 应用所需的关键技…...

【Redis】常用命令汇总

Redis 作为高性能的键值存储数据库&#xff0c;提供了丰富的命令集&#xff0c;主要涵盖 字符串 (String)、哈希 (Hash)、列表 (List)、集合 (Set)、有序集合 (ZSet)、键 (Keys)、Geo&#xff08;地理位置&#xff09;、HyperLogLog&#xff08;基数统计&#xff09;、Bitmap&a…...

分析TCP三次握手与四次挥手

TCP&#xff08;传输控制协议&#xff09;通过三次握手建立连接&#xff0c;四次挥手终止连接&#xff0c;确保数据传输的可靠性。 TCP的三个控制标志位&#xff1a; SYN——用于建立连接&#xff0c;同步序列号。 ACK——用于确认收到的数据。 FIN——用于终止连接。 ISN…...

C++之序列容器(vector,list,dueqe)

1.大体对比 在软件开发的漫长历程中&#xff0c;数据结构与算法始终占据着核心地位&#xff0c;犹如大厦的基石&#xff0c;稳固支撑着整个程序的运行。在众多编程语言中&#xff0c;数据的存储与管理方式各有千秋&#xff0c;而 C 凭借其丰富且强大的工具集脱颖而出&#xff…...

网络安全技术和协议(高软43)

系列文章目录 网络安全技术和协议 文章目录 系列文章目录前言一、网络安全技术1.防火墙2.入侵检测系统IDS3.入侵防御系统IPS 二、网络攻击和威胁三、网络安全协议四、真题在这里插入图片描述 总结 前言 本节讲明网络安全技术和协议方面的相关知识。 一、网络安全技术 1.防火…...

LeetCode697

好的&#xff0c;根据你提供的代码和LeetCode题号&#xff08;697&#xff09;&#xff0c;我将帮助你生成一个结构化的Markdown文档。首先&#xff0c;我们需要补充一些必要的信息&#xff0c;如题目描述、示例、思路分析等。如果你能提供这些信息会更好&#xff0c;否则我会基…...

js基本功(四)

ASCII ASCII(American Standard Code for Information Interchange,美国信息交换标准代码)是一种字符编码标准,用于表示英文字符、数字、标点符号以及一些控制字符。 可以通过 charCodeAt() 方法获取字符的 ASCII 码,也可以通过 String.fromCharCode() 方法将 ASCII 码转…...

linux | Vim 命令快捷操作

注&#xff1a;本文为过去的 “vim 使用笔记”。 跳转命令 跳转命令 #&#xff1a;向前查找光标当前所在单词&#xff0c;并跳转到该单词的上一个出现位置。*&#xff1a;向后查找光标当前所在单词&#xff0c;并跳转到该单词的下一个出现位置。 行内跳转 0&#xff1a;跳转…...

开源订货系统哪个好 三大订货系统源码推荐

在数字化转型加速的今天&#xff0c;企业对订货系统的需求日益增长。一款优质的订货系统源码不仅能提升供应链效率&#xff0c;还能通过二次开发满足个性化业务需求。这里结合 “标准化、易扩展” 两大核心要求&#xff0c;为您精选三款主流订货系统源码&#xff0c;助您快速搭…...

跟着 Lua 5.1 官方参考文档学习 Lua (11)

文章目录 5.4.1 – PatternsCharacter Class:Pattern Item:Pattern:Captures: string.find (s, pattern [, init [, plain]])例子&#xff1a;string.find 的简单使用 string.match (s, pattern [, init])string.gmatch (s, pattern)string.gsub (s, pattern, repl [, n])例子&…...

使用 MyBatis XML 和 QueryWrapper 实现动态查询

本文档介绍了如何在 MyBatis 中结合 XML 配置和 MyBatis-Plus 的 QueryWrapper 来实现动态查询。 1. XML 中定义基本查询 首先&#xff0c;在 MyBatis XML 文件中定义一个基本的 select 查询&#xff1a; <select id"selectCode" resultType"java.util.Ma…...

电商数据仓库实战:从概念模型到物理模型的完整设计流程(含PostgreSQL示例)

电商数据仓库实战&#xff1a;从概念模型到物理模型的完整设计流程&#xff08;含PostgreSQL示例&#xff09; 在电商行业&#xff0c;数据已成为驱动业务增长的核心引擎。一个设计精良的数据仓库能够将分散的交易记录、用户行为和商品信息转化为可操作的商业洞察。本文将带您深…...

安卓蓝牙开发避坑指南:Bluedroid初始化流程中的5个关键细节

安卓蓝牙开发避坑指南&#xff1a;Bluedroid初始化流程中的5个关键细节 在安卓蓝牙协议栈开发中&#xff0c;Bluedroid的初始化流程是系统与蓝牙硬件建立通信的基础桥梁。许多看似随机的蓝牙功能异常&#xff0c;往往源于初始化阶段某些参数的微妙配置差异。本文将深入剖析五个…...

用华为ENSP模拟器复现智慧小区网络:从VLAN划分到三层架构的保姆级配置教程

华为ENSP模拟器实战&#xff1a;智慧小区网络从零搭建全流程指南 当你第一次拿到智慧小区网络设计方案时&#xff0c;那些抽象的拓扑图和配置参数是否让你望而生畏&#xff1f;作为网络工程师成长路上的必经之路&#xff0c;企业级网络搭建从来不是纸上谈兵的游戏。本文将带你用…...

Squeezer安全最佳实践:保护区块链dApp的10个关键点

Squeezer安全最佳实践&#xff1a;保护区块链dApp的10个关键点 【免费下载链接】squeezer Squeezer Framework - Build serverless dApps 项目地址: https://gitcode.com/gh_mirrors/sq/squeezer Squeezer Framework作为构建无服务器区块链去中心化应用&#xff08;dApp…...

velocity-subtemplate-variable-fix

为什么你的 Velocity 子模板变量总是失效&#xff1f;一行代码解决了阅读前提&#xff1a;你正在用 Velocity 做模板引擎开发&#xff0c;主模板能正常渲染&#xff0c;但子模板里一用变量就报空指针或者路径找不到。先说我的血泪史 昨晚被一个问题折磨了两个小时&#xff1a; …...

Python 3.15 JIT不是“可选优化”——而是CPython官方首次强制嵌入的LLVM后端(2024 Q3起新项目默认启用)

第一章&#xff1a;Python 3.15 JIT 的历史定位与架构革命Python 3.15 标志着 CPython 运行时的一次范式跃迁——它首次将生产就绪的、默认启用的即时编译&#xff08;JIT&#xff09;引擎深度集成至解释器核心&#xff0c;而非作为外部补丁或实验性分支存在。这一设计终结了自…...

告别黑盒调试:为VS2022和Halcon HImage定制一个带暗色主题的视觉化调试器

为VS2022和Halcon HImage打造沉浸式暗色调试器&#xff1a;从UI优化到高效开发实践 在计算机视觉开发领域&#xff0c;Halcon凭借其强大的图像处理能力成为工业检测、医疗影像等场景的首选工具。然而&#xff0c;长时间面对传统调试界面容易导致视觉疲劳&#xff0c;影响开发效…...

具身智能系统集成与计算效率优化路径探析

具身智能作为连接人工智能与物理世界的核心载体&#xff0c;通过融合感知、决策、执行等多模块实现自主交互&#xff0c;其系统集成的合理性与计算效率的高低&#xff0c;直接决定了智能体在复杂场景中的落地能力。当前&#xff0c;具身智能正从实验室走向产业化应用&#xff0…...

工业质检避坑指南:手把手教你根据数据成本选择异常检测模型(RGB/PCD/多模态实战)

工业质检实战&#xff1a;如何基于数据成本选择最优异常检测方案 在工业质检领域&#xff0c;算法工程师常面临一个现实困境&#xff1a;实验室里刷榜的模型往往需要昂贵的数据采集设备&#xff0c;而工厂产线上可能只有最基础的RGB相机。我曾参与过多个工业质检项目&#xff0…...

告别蜗牛速度!优麒麟20.04 LTS换源华为云镜像保姆级教程

优麒麟20.04 LTS提速指南&#xff1a;华为云镜像配置全解析 每次在优麒麟上安装软件时&#xff0c;看着进度条像蜗牛一样缓慢前进&#xff0c;是不是让你感到无比焦虑&#xff1f;特别是当你急需某个工具完成工作时&#xff0c;漫长的等待简直让人抓狂。作为一款基于Ubuntu的国…...