新手 Visual Studio 环境配置 详解

文章目录

  • 前言
  • [方法一:通过 项目属性 配置](#方法一:通过 项目属性 配置)
    • [1. 为项目添加 头文件](#1. 为项目添加 头文件)
    • [2. 为项目添加 .lib 文件](#2. 为项目添加 .lib 文件)
    • [3. 为项目指定具体 .lib 库文件](#3. 为项目指定具体 .lib 库文件)
    • [4. 将 .dll 所在文件夹添加到环境变量中](#4. 将 .dll 所在文件夹添加到环境变量中)
  • [方法二:通过 属性表 配置](#方法二:通过 属性表 配置)
  • [附加知识:.lib 和 .dll 的关系](#附加知识:.lib 和 .dll 的关系)

前言

新建一个VS项目,写的代码如果要引用一些库(比如opencv或者其他SDK),需要告诉本项目,库的各种文件在哪个文件夹内。本文介绍两种配置方法,使用Visual Studio 2022,C++语言作为示范。

方法一:通过 项目属性 配置

点击菜单栏"项目",选中最下方"项目属性",出现如下框。

如果没有C/C++这个部分,可能是空项目,只需要在项目里新建一个c++文件,VS会自动识别到这是一个C++项目。

其次,新建文件时最好是在VS的解决方案资源管理器里,右键添加新文件。

如果在windows文件夹里新建,可能会默认在项目中不可见,需要在解决方案资源管理器里点击 展示所有文件 按钮,此时应该可以看见新建的文件,并且图标右下角有红色禁止符号。右键文件,选择包含在项目中 即可。

1. 为项目添加 头文件

打开C/C++ → General常规 → 附加包含目录 Addtional Include Directories

这里需要添加的路径,应该指向SDK库中 .h头文件 所在的文件夹,比如我这里的D:\samples\ThirdParty\UcvSwapper\Include,也可以使用PATH环境变量,比如$(SDK_DIR)\Include

2. 为项目添加 .lib 文件

第二步是为项目添加SDK库的.lib文件,在Linker → 常规 General → 附加库目录 Additional Library Directories

这里添加.lib所在的文件夹的路径

3. 为项目指定具体 .lib 库文件

上一步添加了.lib文件的位置后,还需要指定具体用到哪些库文件,这样不用加载过多无用的库,提高效率。VS项目Linker → 输入 Input → 附加依赖项 Additional Library Directories,一行输入一个文件名。最后记得点击OK/应用保存修改后退出。

4. 将 .dll 所在文件夹添加到环境变量中

大部分时候.lib在编译时起作用,但并不真正包含代码的实现,而是交给.dll实现,减少生成的文件大小。运行时,会动态链接(访问).dll文件来获取需要的功能。

所以想要项目生成的文件能运行,需要告诉cmd那些dll文件在哪。具体方式就是将需要用到的dll所在文件夹,添加到用户/系统环境变量

需要注意的是,修改系统环境变量后,通常重启之后才生效。不需重启就生效的方法也有,可以自行搜索。

方法二:通过 属性表 配置

如果想要在不同VS项目中重复使用相同的配置,或者进行更精细的拆分管理,可以通过属性表做到。

选择菜单栏 → 视图 View → 其他窗口 Other Windows → 属性管理器 Property Manager,打开属性表的文件视图窗口。

这里可以分别配置Debug和Release两种情况下的不同项目属性。右键添加属性表,双击属性表进行配置,配置方法同方法一。配置完就可以在文件管理器中把文件复制到备份文件夹,日后重用了。

需要注意的是,debug和release的属性表互相是不通用的,所以命名时可以在结尾加上_Debug_Release来区分。多张属性表也可以以继承的方式同时生效。

附加知识:.lib 和 .dll 的关系

在 Windows 下,.lib 有两种用途:

  1. 静态库 .lib
    • 完整包含函数实现。
    • 链接器把代码直接编译进你的 .exe,不需要 dll。
    • 生成的 exe 比较大,但运行时不依赖外部文件。
  2. 动态库对应的 import library .lib
    • 当你使用 .dll 的时候,通常还会配一个 .lib,叫 import library。
    • 链接器编译时用这个 .lib 文件去"占位",知道函数在哪。
    • 真正的实现在 .dll 里,运行时程序去加载 .dll。
    • 如果没有 .lib,VS 编译器不能直接链接 dll,除非你自己用 LoadLibrary/GetProcAddress 动态加载。
    • 所以链接器需要 .lib 文件(import library)来完成编译,运行时依赖 .dll 提供真正实现。
相关推荐
陈煜的博客20 小时前
idea 项目只编译不打包,跳过测试,快速开发
java·ide·intellij-idea
Wave84520 小时前
C++继承详解
开发语言·c++·算法
Tairitsu_H21 小时前
C++类基础概念:定义、实例化和this指针
开发语言·c++
不想写代码的星星21 小时前
C++17 string_view 观察报告:好用,但有点费命
c++
努力努力再努力wz21 小时前
【Linux网络系列】深入理解 I/O 多路复用:从 select 痛点到 poll 高并发服务器落地,基于 Poll、智能指针与非阻塞 I/O与线程池手写一个高性能 HTTP 服务器!(附源码)
java·linux·运维·服务器·c语言·c++·python
努力努力再努力wz21 小时前
【Linux网络系列】万字硬核解析网络层核心:IP协议到IP 分片重组、NAT技术及 RIP/OSPF 动态路由全景
java·linux·运维·服务器·数据结构·c++·python
minji...21 小时前
Linux 线程同步与互斥(四) POSIX信号量,基于环形队列的生产者消费者模型
linux·运维·服务器·c语言·开发语言·c++
王老师青少年编程1 天前
csp信奥赛C++高频考点专项训练之贪心算法 --【排序贪心】:拼数
c++·算法·贪心·csp·信奥赛·排序贪心·拼数
程序猿编码1 天前
给Linux程序穿“隐身衣”——ELF运行时加密器全解析(C/C++代码实现)
linux·c语言·c++·网络安全·elf·内存安全
John_ToDebug1 天前
从 Win10 到 Win11 22H2+:任务栏美化中的“蒙版”和“Hover 色块”渲染原理解析
c++·chrome·windows