Skip to content

配置VS2022

VS项目目录

在VS的解决方案资源管理器当中,我们可以清晰的看到一个项目下面又分了几个,如下图所示:

VS项目的层级关系

我们可以在解决方案资源管理器当中选择一个项目,然后右键选项点击"在文件资源管理器中打开文件夹"。此时打开的就是此项目在本地的文件目录。

如下图所示:

VS项目目录

我们可以发现这个项目的目录下并没有我们想象的:

  1. 头文件目录文件夹
  2. 源文件文件夹
  3. 资源文件文件夹
  4. ...

这是因为:VS的一个项目当中的"外部依赖项"、"头文件"、"源文件"等并不是一个物理目录,只是一个逻辑上的分类。实际上它们直接物理存储在同一个目录下!

此目录下存储的诸如.vcxproj作为后缀名的文件,实际上就是存储了这些同一个目录下的项目文件的关系。

所以就VS而言,解决方案,项目的关系可以用下图来描绘:

VS解决方案、项目组织图

试想一下,如果在VS项目的"头文件"下面创建一个"hello.h",如下图所示:

创建一个新的头文件

这两个文件在实际的项目目录下,是如何存储的呢?

答案很简单,直接存储在同一目录下。

项目文件分析

在项目目录中我们一般会发现以下几种文件:

  • 项目名称.sln解决方案文件。每个解决方案可以包含多个项目,这样可以把项目导入进来,设置它们的编译依赖关系 和次序。
  • 项目名称.vcxproj项目配置文件。大部分项目的配置都存在此文件中,包括引用哪些文件,头文件路径,库文件设置等。
  • 项目名称.vcxproj.filters文件在项目中的目录层次。如果此文件丢失,所有代码文件都会统一列在项目中,就不会有头文件,源文件的区分。
  • 项目名称.vcxproj.user本地化用户配置。比如调试路径设置,如果换了机器需要重新设置,调试路径可以设置为相对路径。
  • .vs目录编译调试的临时文件。版本库中此目录下文件不要上传。

项目配置

右击项目 ---> 选择 属性 即可打开项目配置对话框

打开项目配置

项目配置对话框

常规配置

项目配置对话框

输出目录

包含了编译的输出和调试文件的输出,一般可以设置相对路径,(在项目目录结构为 binlibsrcdocinclude、... 的情况下)我们一般设置到 ..\..\bin,如果设置不真确,会照成调试失败,找不到调试文件的错误。

Windows SDK 版本选择

如果系统安装了多个vs 版本,会有对应的windows SDK 版本选择,如果拿到是别人或者是我提供的vs 项目,他机器的sdk 版本和你不一致,你需要重新选择sdk 版本。windows 的 SDK 也可以单独安装。

用于解决编译错误 vs20xx error MSB8036: The Windows SDK version 10.0.17134.0 was not found.

平台工具集

平台工具集确认生成程序的运行环境,比如你选择支持XP 那很多新特性就不可以用,vs2017 已经默认不支持XP,如果需要编译在安装要勾选“对C++的WindowsXP 支持”,已经安装完成的,可以再次安装,选着修改。

调试配置

调试配置对话框

调试默认是项目所在路径 $(ProjectDir) 也就是vcxproj 文件所在的路径,当碰到要读取配置文件或者访问dll动态链接库的时候,就可以能错误,我们一般设置到默认的相对路径比如 ..\..\bin

调试路径和输出路径一致也能解决调试找不到执行文件的问题。

C/C++配置

C/C++配置

Tips

刚创建完项目没有新建源代码文件的情况下配置页中可能没有 C/C++配置 的配置选项,此时需要新建C/C++源代码文件。(可能还需要编译运行一项项目,暂时未做验证。)

常规

附加包含路径,就是头文件路径,为了项目协作,尽量使用相对路径,我们一般放在 ../../include 目录下。

预处理器(预定义宏)

设置项目预定义的宏,宏可以用于区分dll还是exe项目,也可以用于定义一些忽略安全检测的宏。

代码生成

运行库

在调用静态库时,运行库与静态库设置不一致,会产生编译错误。

预编译头

可以加快编译速度,旧版本总是容易产生问题,新版本不确定,所以一般关掉,并且由于必须引用预编译头文件,不利于跨平台开发。

链接器

image-20240819115238457

常规

用来设置输出文件目录和lib库引用目录

输出文件设置程序或者动态库的输出路径,默认 $(OutDir)$(TargetName)$(TargetExt) 是配置的输出路径+目标名称+目标后缀。

输入

设定具体导入的lib库

系统

控制台/窗口程序切换,切换程序的类型,入口函数也发生变化,可以通过预处理指令来通配。

高级

导入库:动态库lib文件输出路径设置

配置管理器

debug、release,x86,x64,arm

工具栏目中可以选着编译release版本还是debug版本,并且可以选着位数x86或者x64,debug和release有独立的配置。

在项目的属性页上方可以选着配置的版本(debug,release)和平台(win32,x64)具体的平台的设定在配置管理器中指定。

解决方案配置

多项目的解决方案如何启动

由于一个项目只能存在一个main函数,所以如果希望多个main函数共存,就需要创建存在多个项目的解决方案。

我们已经知道这个按钮的作用是:

VS-启动C程序

编译代码,生成可执行程序,然后运行这个可执行程序。

那么如果此解决方案有多个项目,又是什么情况呢?

很简单,由于每个项目中最多只有一个main入口函数,那么VS会编译每一个项目中的代码,为每一个项目生成一个可执行文件。也就是会生成多个可执行文件。

那么问题又来了,多个可执行文件最终执行哪一个呢?还是时候全部都执行?

观察下图中同一个解决方案下的,两个项目的项目名,它们有什么区别?

多项目解决方案

很显然,第一个项目HelloWorld的名字是加粗的。

VS也提供了修改启动项目的功能,右键单击某个项目会出现如下图所示的菜单:

VS设置启动项目

设定启动项目后,点击按钮就会运行对应项目中的main方法。

除了设置固定的启动项目外,VS还可以直接将启动项目设置为当前打开的项目,如下所示:

VS设置启动项目为当前项目

两种方式,大家自行选择一种即可。

项目依赖项

通过设置各个项目之间的依赖关系,来设定编译的次序,比如执行程序调用了动态库项目,必然要依赖动态库,动态库就会在执行程序之前编译。

更好用的代码提示功能

使用VS写代码时,若想选择代码提示进行输入,需要按一下Tab键再回车,这未免麻烦了点,我们可以进行以下设置,使得可以直接回车选择代码提示:

  1. 打开 Visual Studio。
  2. 点击菜单栏中的"工具 --> 选项"
  3. 在左侧的导航树中,定位到"文本编辑器 --> C/C++ --> 高级"
  4. 在右侧的设置列表中,找到与 IntelliSense 相关的设置。
  5. 将"主动提交成员列表"从默认设置的False改成True。

更好用的代码提示功能-设置界面

设置完成后,代码提示出现时就可以直接回车选择生成代码了,这样会更方便一些。

查看或修改C语言版本

要查看或修改在Visual Studio中使用的C语言版本:

  1. 打开你的项目。
  2. 右键点击项目名,选择 属性
  3. 在左侧导航窗格中,选择 配置属性 --> 常规
  4. 查找与C语言标准相关的选项(C语言标准),并根据需要进行调整。

项目属性当中的C语言标准

那么上图中的MSVC是什么东西呢?

MSVC是什么?

默认情况下,VS采用(旧MSVC)作为C语言的版本。那么MSVC是什么呢?

MSVC(Microsoft Visual C++)是微软公司自己开发的C、C++语言编译器套件,可以用来编译C或者C++程序。但它有自己的一套特性和扩展,并不完全遵循官方标准。

比如MSVC中的C语言编译器,它支持C90的全部特性和部分C99的特性,几乎不支持C11等更高版本。

在当下我们的学习中,这个编译器已经够用了,因为我们只学习C语言的基本概念语法。

MSVC存在一些特定于Windows平台的扩展和特性,这在某种程度上限制了其跨平台性,而且它对C语言的支持并不好。

为了更好的实现跨平台性,尤其是对Unix/Linux操作系统的支持,我们在后续会使用GCC作为编译器。

GCC(GNU Compiler Collection即GNU编译器套件),是Unix-like平台下最常用的C/C++语言编译器。它开源免费,性能优良,完整支持官方标准,扩展性和跨平台性好。

修改启动快捷键

点击菜单栏中的"工具 --> 选项",打开设置选项卡。按照下图输入"调试.启动"搜索找到该快捷键,然后即可进行修改。

修改调试启动快捷键

默认的Debug调试启动快捷键是F5,我一般都会修改成F1。

同样的操作,搜索"调试.开始执行不调试"可以找到正常启动快捷键,然后也可以进行修改。

修改正常启动快捷键

默认的正常不调试启动快捷键是Ctrl + F5,我一般都会修改成Ctrl + F1,但这个快捷键基本不会使用,改不改都不太所谓。

如果你想修改VS的其它快捷键,也可以仿照该案例去完成。

选择启动项目的插件

在使用VS编写C代码的过程中,毫无疑问需要经常创建多项目解决方案,此时频繁手动切换启动项目是比较麻烦的。所以推荐一个可视化选择启动项目的插件:SwitchStartupProject

大家可以在"扩展--管理扩展"的"联机市场"中搜索此插件安装,然后重启VS即可。

安装成功后,主界面菜单栏下就会多一个下拉框用于选择当前启动项目,这个插件还是比较方便的,推荐安装。

选择启动项目-插件

Tips

此插件偶尔会有bug无法选择启动项目,此时重启解决方案即可解决。

固定当前项目为启动项目

拥有上面一个插件后,虽然让我们的VS启动项目操作变得简单很多了,但实际还是不太方便的,还是需要每次都点击选择启动项。

实际上我们更希望,点击哪个项目中的main.c文件,哪个项目就是启动项目。VS支持这样的设置,参考下列步骤设置:

点击菜单栏中的**"工具 --> 选项",打开设置选项卡。按照下图输入"生成并运行"**搜索找到对应选项框,勾选它即可。

更好用的启动项目设置-图示

这样设置后,你每次创建的新的解决方案,都会固定使用当前选定的项目作为启动项目。

配置代码模板(建议做)

如果每次新建项目时,都选择"空项目"或者"控制台应用",那么接下来就需要自己动手新建一个".c"文件编写代码,这是比较麻烦的。所以建议大家配置一个代码模板,这样便于大家快速创建一个C程序骨架。

按照以下流程走:

创建一个标准的C项目
  1. 打开Visual Studio
  2. 新建一个C++"控制台应用"项目。
  3. 在解决方案资源管理器中,删除所有默认生成的.cpp文件。
  4. 添加一个新的.c文件,命名为main.c
  5. main.c文件中,输入你想要的默认内容。

这里推荐一个"main.c"文件的代码内容:

cpp
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

/*

*/

int main(void) {
    printf("hello world!\n");
    return 0;
}

其中:

  1. "#define _CRT_SECURE_NO_WARNINGS" 是微软的MSVC平台下特有的宏定义,用于禁用运行时编译警告。
  2. "#include <stdio.h>"包含头文件,这样就可以使用"printf"等函数。
导出项目为模板
  1. 在VS的文件菜单上选择“项目 --> 导出模板”。
  2. 选择“项目模板”,然后点击下一步。
  3. 输入模板的名称、描述等相关信息,然后点击完成。(注意模板的名称必须是英文的,不能用中文)
  4. 记住你输入的模板的名字,方便后续创建项目时使用。

导出项目为模板-图

使用新模板创建项目
  1. 当你下次新建一个项目时,你可以在模板中下拉找到你创建的项目模板。
  2. 选择你刚才保存的模板,输入你的项目名,并创建。
  3. 这个新项目会自动生成一个main.c文件,内容和你在模板中设置的完全相同。

你还可以将你的模板固定在项目创建的左页面,比如下图:

固定项目模板到页面

这样下一次你就可以更快的找到你创建的模板了。

以上,就完成了VS项目模板的配置和使用。

设置UTF-8编码

UTF-8(无BOM)和UTF-8这两个有什么区别呢?BOM是什么呀?

BOM: Byte Order Mark UTF-8 BOM又叫UTF-8 签名,其实UTF-8 的BOM对UFT-8没有作用,是为了支援UTF-16,UTF-32才加上的BOM,BOM签名的意思就是告诉编辑器当前文件采用何种编码,方便编辑器识别,但是BOM虽然在编辑器中不显示,但是会产生输出,就像多了一个空行。

一般采用UTF-8无BOM格式即可。

在字符串前面使用 u8 ,可保证解析时安装utf-8的方式解析。

cpp
fputs(u8"测试文本\n", fp);

方式一

使用预处理指令

cpp
#pragma execution_character_set("utf-8")

方式二

安装插件:Force UTF-8

方式三

更改VS的编码方案,首先需要打开高级保存选项

工具 ➡️ 自定义 ➡️ 命令 ➡️ 菜单栏 ➡️ 文件 ➡️ 添加命令 ➡️ 文件 ➡️ 高级保存选项 ➡️ 确定

然后打开文件在高级保存选项中,选择UTF-8编码方案。