当前位置: 首页 > 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 临时文件存放路径

相关文章:

  • UI自动化测试Selenium安装教程(1)
  • 《加快应急机器人发展的指导意见》中智能化升级的思考——传统应急设备智能化升级路径与落地实践
  • 【JavaEE】网络原理
  • FPGA学习篇——Verilog学习5(reg,wire区分及模块例化)
  • 【洛谷P1080国王游戏】2025-3-7
  • K8S学习之基础十三:k8s中ReplicaSet的用法
  • VUE3开发-4、组件引入
  • 《A++ 敏捷开发》- 18 软件需求
  • java 重点知识 — JVM存储模块与类加载器
  • js基本功(五)
  • 【Linux网络#13】:网络层(IP 协议 网络通信 全球网络 路由转发)
  • STM32F4 UDP组播通信:填一填ST官方HAL库的坑
  • 【JAVA架构师成长之路】【电商系统实战】第12集:秒杀系统性能优化实战(CAN + Nginx + Sentinel)
  • Myslq表的内外连接
  • tomcat安装
  • [数据抓取] Python 网络爬虫 - 学习手册
  • WIFI ESP8266以及基础功能介绍
  • Python环境安装(3.8)
  • C++学习之格斗小游戏综合案例
  • 线性代数--矩阵基本计算(加减乘法)
  • 婚纱摄影网站建设方案/推广普通话手抄报图片大全
  • 全国交通建设网官方网站/泰安seo
  • 武汉网站制作平台/品牌推广渠道
  • 马鞍山网站建设制作/网络推广是做什么的
  • 学服装设计有前途吗/网站seo排名优化工具在线
  • 泉州高端模板建站/百度指数网址是什么