Visual Studio 2022 入门指南,如何快速掌握?
摘要:本文是 Visual Studio 2022 的入门指南,主要介绍了解决方案与项目的组织结构、过滤器的使用、包含目录的配置、宏的使用方法,以及静态库和动态链接库的创建与使用。此外,还介绍了如何使用 CMake 自动生成解决方案。
Visual Studio 2022 入门指南
目录Visual Studio 2022 入门指南解决方案(Solution)与项目(Project)过滤器(Filter)如何正确配置包含目录?宏(Macro)示例库的使用静态库(Static Library,.lib)创建使用引用手动配置(不推荐)动态链接库(Dynamic Link Library,.dll)使用 CMake 自动生成解决方案手动配置原生支持参考资料
解决方案(Solution)与项目(Project)
一个解决方案是用于组织和管理一个或多个相关联项目的容器。这套结构旨在将一个复杂的实际问题,分解成多个功能独立的模块(项目)来开发和管理。
解决方案(.sln 文件):这是最高层级的组织单位,它定义了所包含的项目以及它们之间的依赖关系和构建配置。当你打开一个 .sln 文件时,Visual Studio 会加载整个工作区。
项目(.vcxproj、csproj 等文件):每个项目对应一个独立的模块,最终会生成一个可执行文件(.exe)、一个静态库(.lib)或一个动态链接库(.dll)。
需要注意的地方:
单一启动项目:在一个解决方案中,通常只有一个项目被设置为启动项目。启动项目是点击 “开始调试”(F5)时,Visual Studio 将会编译和运行的项目。可以在解决方案资源管理器中右键点击不同的项目,选择 "设为启动项目"。
“将解决方案和项目放在同一目录中”:
勾选:解决方案文件(.sln)和项目文件(例如 .vcxproj)会存放在同一个文件夹中。这对于只有一个或少数几个项目的简单解决方案来说,目录结构更扁平、更清晰。
不勾选(默认):Visual Studio 会创建一个顶层文件夹来存放解决方案文件(.sln),然后在该文件夹下为每一个项目再创建一个独立的子文件夹。当解决方案包含多个项目时,这种结构更加有条理,是更推荐的做法。
过滤器(Filter)
过滤器(Filter)是 Visual Studio 解决方案资源管理器中的一个虚拟文件夹结构。它的主要作用是帮助开发者组织和分类源文件、头文件等,使项目看起来更整洁,所有的代码文件(源文件和头文件)都应该加入过滤器中。开发者可以自由地创建、重命名或删除过滤器,这不会影响磁盘上文件的实际位置。
而对于编译器(例如 MSVC、GCC 等)在编译代码时,只关心真实的目录结构,而非过滤器中的配置。所以当编译器报错 “无法打开源文件” 或 “找不到头文件” 之类的错误时,问题几乎总是出在项目属性的路径配置上,而不是解决方案资源管理器的过滤器结构。
如何正确配置包含目录?
当项目需要引入外部头文件(例如来自另一个项目货第三方库)时,必须明确告知编译器去哪里查找这些文件。
在解决方案资源管理器中右键点击项目,选择属性。
确保顶部的配置和平台设置正确。
导航到 C/C++ \(\rightarrow\) 常规。
在附加包含目录字段中,添加所需头文件所在的真实目录路径。
在 Visual Studio 中选择的目录会被设置为绝对路径,当解决方案发生移动,或者发送给合作者时,就会导致错误。这可以通过 Visual Studio 中提供的宏来解决。
宏(Macro)
Visual Studio 提供了一系列预定义的宏(Macro),这些宏会在构建时被动态地解析为具体的路径。
常用宏变量:
宏
描述
$(SolutionDir)
解决方案文件(.sln)所在的目录
$(ProjectDir)
当前项目文件(.vcxproj)所在的目录
$(OutDir)
最终输出文件(如 .exe、.dll)的存放目录
$(IntDir)
编译过程中产生的中间文件(如 .obj)的存放目录
$(Configuration)
当前的构建配置名称,如 Debug 或 Release
$(Platform)
当前的构建平台名称,如 x64 或 Win32
示例
假设解决方案目录结构如下:
MySolution/
├── MySolution.sln
├── ProjectA/
│ └── ProjectA.vcxproj
└── Libraries/
└── MyLib/
└── include/
└── my_header.h
如果 ProjectA 需要包含 my_header.h,则可以在 ProjectA 的 “附加包含目录” 中设置为:$(SolutionDir)\Libraries\MyLib\include。
这样一来,即使将整个 MySolution 文件夹移动到其他位置,这个相对路径依然有效。
