【Tools】VS基本使用

文章目录

  • 0 前言
  • 1 下载安装与基本使用
    • 1.1 下载安装
    • 1.2 项目创建
    • 1.3 编译运行和调试
    • 1.4 界面和设置
  • 2 项目属性配置【重点】
    • 2.1 打开项目属性配置窗口
    • 2.2 静态库和动态库
    • 2.3 包含目录&库目录&依赖项&工作目录
    • 2.4 代码中添加附加依赖项
    • 2.5 配置项目环境变量
    • 2.6 修改属性配置文件
    • 2.7 其他常用设置
      • 2.7.1 设置C++标准
      • 2.7.2 设置项目类型
  • 3 插件
    • 3.1 格式化插件Astyle
    • 3.2 彩虹括号Viasfora
  • 4 其他
    • 4.1 快速打开文件所在文件夹
    • 4.2 区块选择
    • 4.3 Updating...

0 前言

  最近因为项目实践,使用VS比较多,在使用过程中遇到并解决了很多问题,因此这里想结合此前记录的一些第三方库配置的文章博客来做一次总结。

Note:这里统一以VS2017 pro为参考,其他版本类似。

1 下载安装与基本使用

1.1 下载安装

  这里的下载安装建议直接到官网下载

VS2017官方下载链接

打开之后可以看到如下界面:

在这里插入图片描述

找到VS 2017 pro的版本,点击下载即可。

如果要下载其他版本,可以改变上面的搜索内容然后重新搜索:

在这里插入图片描述

进入这个网页应该是需要登录微软账号

下载好之后,直接双击安装即可:

在这里插入图片描述

在选择安装的组件这个界面,左侧是一些大的开发类别,右侧是每个类别对应的一些小的组件。可以根据自己的需要进行选择。比如我这里因为只需要开发C++,所以只勾选了一个:

在这里插入图片描述

右下角有安装这些组件所需的空间大小

然后就是耐心等待安装完成:

在这里插入图片描述
Enjoy!

1.2 项目创建

  安装完成之后,接下来就是创建项目并开发了。

  • 打开:文件->新建->项目
    在这里插入图片描述

  • 选择项目类型
    在这里插入图片描述

  项目创建完成之后,注意观察软件中的文件目录和文件夹目录:

在这里插入图片描述

在这里插入图片描述

可以发现:

  • 一个解决方案可以包含多个project,而这也是大型项目开发常用的方式,即将项目分为各个模块,每个模块对应一个project

  • 如果解决方案下只有一个project,解决方案的名字不必和project名字相同

  • 编译运行文件叫Debug还是Release取决于解决方案中的属性配置。
    在这里插入图片描述

  • 每个项目都有头文件和源文件,其位置和实际文件夹的位置并不是一一对应的关系。右键新建文件时是可以选择文件所在路径的。

1.3 编译运行和调试

  • 编译
    在VS中,编译叫做“生成”,在菜单栏生成中:
    在这里插入图片描述
    如果解决方案中有多个project,也可以右键单个project生成:
    在这里插入图片描述
  • 运行和调试
      对于C++来说,运行和调试应该是两个不同的指令,但是在VS中,运行和调试就是一个按钮。如果有断点,那就是调试,即运行到断点就停止,然后可以单步运行。如果没有断点,就是运行。另外如果没生成直接运行,程序会先生成一次再运行,这个很容易理解。

      如何设置断点就不再提了,这里介绍一个断点设置的功能,即添加断点的条件和操作:在这里插入图片描述在这里插入图片描述
    这样可以实现在调试一些循环代码时设置特定循环才停下,提高调试效率。

1.4 界面和设置

  这里来简单认识一下软件的一些常用操作。

  • 打开各种窗口
      在使用软件的过程中,常常会遇到“某个窗口叉掉了,怎么找回来”的问题,其实很简单,在菜单栏“视图”中包含了所有需要唤起的窗口:在这里插入图片描述

不用全记下来,知道这里有需要用的时候再来查看就行。

  • 调整窗口的位置
      VS各个功能窗口可以根据自己需要自由调整,比如在同时编辑.cpp和.h文件时,可以放置两个并列的窗口:

在这里插入图片描述
这样可以实现函数声明和定义对照着看,非常方便

需要注意的是,在拖放窗口时是以鼠标所在位置来决定窗口所在位置的。

  • 设置快捷键
      打开“工具=>选项”,直接在搜索框里面搜索“键盘”,然后在显示命令中搜索“注释”,就能看到注释选中内容和取消注释两个。
    在这里插入图片描述
    设置快捷键时,首先选中指令,光标聚焦在“按快捷键”输入框中,再按下键盘快捷键,再点击“分配”,最后点击“确定”即可完成设置。

  • 编辑器文本设置字体和颜色
      打开“工具=>选项”,找到“字体和颜色”,如下图所示
    在这里插入图片描述
    这里建议设置为Fira Code,Consolas等编程字体。

2 项目属性配置【重点】

  前面介绍的都是一些基本功能,实际上VS最大的优势在于项目属性配置,极大方便了第三方包的开发。

2.1 打开项目属性配置窗口

  在项目上右键,滚动到最底下,找到属性
在这里插入图片描述

或者是点击菜单栏 “调试==>xx属性”

在这里插入图片描述

就可以打开一个属性配置窗口:
在这里插入图片描述
首先要注意的就是上面的“配置”和项目的配置一致:在这里插入图片描述

一般来说,是先设置好项目中的配置,然后打开属性界面,自然就会和项目配置保持一致。切记不要随便改动项目中的配置,如果一定要改,则要重新配置一遍。

这是开始其他配置的基本前提,一定不能对错了,否则配置的完全不能用。

2.2 静态库和动态库

  在了解VS项目属性配置之前,先简单了解一下C++编译运行的基本原理。
  我们都知道,C/C++作为编译型语言,需要经历“编辑==>编译==>链接==>运行”四个步骤。其中链接阶段就是链接除主程序外的库,主要有两种:静态(链接)库动态(链接)库

  • 静态库
      静态库在Windows上常用的后缀是.lib,在Linux系统上后缀是.a,它是在编译时加载生成目标文件,在运行时对库没有依赖性。一般来说,静态库会有一个对应的头文件,告知编译器.lib文件中有哪些可用的函数接口。

  • 动态库
      动态库在Windows上的后缀是.dll,在Linux上的后缀是.so,它是在运行阶段,即已经生成exe执行文件了,exe的执行需要依赖dll文件。

  • 二者的优劣和使用场景
      从上面的介绍可知,静态库需要在编译时加载,这样会导致最后的执行程序非常大,但生成执行文件之后,不再有库依赖的问题。而动态库是在生成目标之后去链接,这样执行程序会比较小,但运行有依赖。
      但是,在实际应用当中,使用动态库的居多。这是因为如果依赖的库有更新的话,使用静态库还需要重新编译软件,而如果使用动态库,只需要更新库,即dll文件即可,更加简便高效。

2.3 包含目录&库目录&依赖项&工作目录

  有了上述基本理论的支撑,接下来理解项目属性配置中的各种目录就会很简单。

  在“VC++目录”中可以设置各种目录:
在这里插入图片描述

但是如果修改这里的包含目录,它的影响是全局的,而如果只修改附加包含目录,只影响当前项目,而对其他项目没有影响。(库目录同理)

因此我们一般不在这里设置,而是设置附加目录:

  • 附加包含目录
    在这里插入图片描述

  • 附加库目录
    在这里插入图片描述

  • 附加依赖项
    在这里插入图片描述

  当包含的第三方依赖较多时,建议在项目目录下分别新建一个includelibbin文件夹,分别用来放置头文件(.h),静态库(.lib),动态库(.dll):
在这里插入图片描述

然后在项目属性配置中就可以采用相对路径来进行配置了,这样可以保证项目的可移植性。注意这里的相对路径是相对项目目录的:
在这里插入图片描述
如果不放心,可以使用VS提供的宏:
在这里插入图片描述

附:查看VS宏的方式:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  可以发现,这里的宏其实就是系统环境变量加上VS自定义的宏,比如前面的项目路径等。使用方式都是一样的,就是$(xxxx),不过要注意如果是路径的宏定义,要看最后有没有\,这决定了其子目录要不要加上分隔符。

  最后是工作目录的设置,所谓工作目录,即在软件中运行调试时工作路径,一般来说要设置为包含所有动态库的路径,即运行时所需要的依赖。
在这里插入图片描述

这里默认的设置是$(ProjectDir),即项目目录,因此,如果动态库较少的情况下,也不用单独创建一个bin文件夹,然后再修改工作目录了。可以直接把dll文件扔到项目目录下。

这里需要注意一点:直接点击生成的执行程序和在VS中点击运行是不一样的,主要差别就在于工作目录的不同,因此如果需要点击运行执行程序,那么就需要把依赖复制到执行程序所在路径下,切记切记。

2.4 代码中添加附加依赖项

  可能有些人会有这样的疑问:为什么添加了lib文件所在的路径,还需要指定具体的lib文件呢?包含目录不是也就指定了一个路径吗?其实这个也可以理解,包含目录和库目录都是告诉编译器去哪里找编译时需要的文件,但是在代码中已经指定了要包含哪个文件(#include "xxxx.h"),而链接库却没有告诉具体要链接哪个,所以还需要指定具体的库文件。

  此外,除了在项目属性配置中设置附加依赖项外,还可以在代码中设置需要链接的库:

#pragma comment(lib,"Ws2_32.lib")

附:#pragma据说是最复杂的预编译指令,这里有篇文章总结得相对全,可以参考:Link

2.5 配置项目环境变量

  有一些第三方库可能会要求配置环境变量,但是如果每一个库都去配置的话,一是比较麻烦,二是有可能会超出环境变量的长度。因此,对于一些比较特定项目使用的环境变量,可以在项目属性中设置:
在这里插入图片描述

设置为:

PATH=路径1;路径2;.....;$(PATH);    #这里要以;分割不同的路径

2.6 修改属性配置文件

  首先打开属性管理器

在这里插入图片描述

注意区分属性窗口和属性管理器,有些可能属性管理器不在其他窗口中,而是在一级子目录。这里建议同时打开,如下所示。

在这里插入图片描述

可以看到,当点击属性管理器中某个属性文件时,底下的属性窗口会显示该文件所在路径。很明显,这里自带的属性文件都是全局的文件,为了不污染系统的设置,建议如果有存储属性文件的需求,自己再新建一个属性文件:

在这里插入图片描述

然后双击打开,按照自己的需要进行配置。配置好之后,如果其他项目需要相同的配置,则可以选择“添加现有属性表”。这样就实现了一定意义上的“永久配置”

2.7 其他常用设置

2.7.1 设置C++标准

  默认的c++标准应该是C++ 11,可以根据自己的需要设置成更新的版本:
在这里插入图片描述

2.7.2 设置项目类型

  如果该项目的需要被其他项目使用,比如需要导出dll,那么就可以在这里设置一下:
在这里插入图片描述

3 插件

  VS还有一个很好的功能,那就是支持添加插件,这样可以提供一些自定义的功能。添加插件的方式也很简单:
在这里插入图片描述

然后可以在搜索框中搜索:

在这里插入图片描述

另外,也可以到微软官方的插件商店去下载,然后本地安装:
https://marketplace.visualstudio.com/

在这里插入图片描述

下面介绍几个常用的插件,也会随着后续的使用不断更新。

3.1 格式化插件Astyle

在这里插入图片描述
安装完成之后,可以在选项中找到插件的设置:

在这里插入图片描述

包括设置缩进用空格还是tab、缩进字符数、快捷键等。

3.2 彩虹括号Viasfora

  如果括号嵌套太多,可能会不知道括号之间的对应关系,为了解决这个问题,可以装一个可以设置彩虹括号的插件——Viasfora,但是很遗憾,VS2017pro在插件中搜索不到这个插件,官方插件网站下载的也无法安装:
在这里插入图片描述
通过点击左下角的“查看安装日志”可知,该插件支持的VS版本是[17.0, 18.0)(左闭右开?):
在这里插入图片描述

而VS2017pro对应的版本是15.9.58
在这里插入图片描述

显然,问题在于这个插件版本太新了,于是,找到该插件的GitHub网站,找了个旧版下载然后安装上了。

在这里插入图片描述

4 其他

  这里主要是总结一些使用过程中的小技巧

4.1 快速打开文件所在文件夹

  右键文件标签页,选择“打开所在的文件夹”
在这里插入图片描述

4.2 区块选择

  当代码中出现类似的语句需要全部替换时,除了使用查找替换,还可以使用VS自带的多光标功能:
请添加图片描述
注意,这里是按住Alt键,然后拖动鼠标。

4.3 Updating…

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/601121.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

护眼台灯是智商税吗?眼科医生告诉你哪款护眼台灯最好

青少年近视发病率高达67%,如今,人们都被屏幕包围着,电脑、手机和电视已经成为最重要的信息手段,我们周围的屏幕也隐藏着有害的光污染。 对于4-15岁年龄段的孩子而言,除了学习本身带来的视力损伤外,每天接触…

C语言学习NO.12-字符函数(二)-strcpy,strcat,strcmp长度不受限制的字符串函数

一、strcpy的使用和模拟实现 &#xff08;一&#xff09;strcpy使用 //strcpy的使用 #include <stdio.h>int main() {char arr1[] "abcdef";char arr2[10] "qwertt";char arr3[10] "okl";strcpy(arr2, arr1);printf("arr2 %s\n&…

iOS 解决push证书不受信任

重新下载&#xff1a;https://www.apple.com/certificateauthority/

leetcode:2784. 检查数组是否是好的(python3解法)

难度&#xff1a;简单 给你一个整数数组 nums &#xff0c;如果它是数组 base[n] 的一个排列&#xff0c;我们称它是个 好 数组。 base[n] [1, 2, ..., n - 1, n, n] &#xff08;换句话说&#xff0c;它是一个长度为 n 1 且包含 1 到 n - 1 恰好各一次&#xff0c;包含 n 两…

Java反射篇----第三篇

系列文章目录 文章目录 系列文章目录前言一、反射使用步骤(获取 Class 对象、调用对象方法)二、获取 Class 对象有几种方法三、利用反射动态创建对象实例前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章…

Rust:qmetaobject 框架的环境变量和搜索路径设置

一、编译错误 安装qmetaobject后&#xff0c;编译出现下面错误信息&#xff0c;原因是环境变量和搜索路径没有正确设置。 qt_gui>cargo run warning: unused manifest key: buildCompiling qttypes v0.2.11 error: failed to run custom build command for qttypes v0.2.1…

【MYSQL】MYSQL 的学习教程(十一)之 MySQL 不同隔离级别,都使用了哪些锁

聊聊不同隔离级别下&#xff0c;都会使用哪些锁&#xff1f; 1. MySQL 锁机制 对于 MySQL 来说&#xff0c;如果只支持串行访问的话&#xff0c;那么其效率会非常低。因此&#xff0c;为了提高数据库的运行效率&#xff0c;MySQL 需要支持并发访问。而在并发访问的情况下&…

【IPC通信--信号】

信号处理函数 • 信号发送函数 – kill(), sigqueue(), raise(), alarm(), setitimer(), pause() &#xff0c; abort() • 信号安装函数 – signal(), sigaction() • 信号集操作函数 – sigemptyset(), sigfillset(), sigaddset(), sigdelset(), sigismember() 信号发送函数—…

将yolov8的检测框从正框修改为旋转框需要做那些修改?

将yolov8项目修改为yolov8_obb项目需要修改模型结构(增加角度预测)、dataloader(使其支持dota格式数据)、修改TaskAlignedAssigner(使其支持带角度的bbox)、修改loss(新增对角度的训练)、修改metric(将hbb指标titile修改为obb)、修改绘图代码(使其能绘制旋转框)。 …

常用类型_日期..

1.Date java.util.Date是开发中常用的日期处理类(并非java.sql.Date类) 现在这么一个需求&#xff1a; 就是获取当前时区的时间 public class Main{public static void main(String[] args) {// d1和d2表示的时间都是一样的 所以推荐使用第一种写法 比较简洁Date d1 new Da…

MybatisPlus—快速入门

目录 1.使用MybatisPlus的基本步骤 1.1引入MybatisPlus的起步依赖 1.2 定义Mapper 2.MybatisPlus常用注解 2.1 TableName 2.2 TableId 2.3 TableField 2.4 小结 3. 常用配置 4. 总结 1.使用MybatisPlus的基本步骤 1.1引入MybatisPlus的起步依赖 MyBatisPlus官方提…

124基于matlab的禁忌搜索算法和蚁群优化算法优化TSP路径

基于matlab的禁忌搜索算法和蚁群优化算法优化TSP路径&#xff0c;动态输出路径规划过程及输出最小距离。数据可更换自己的&#xff0c;程序已调通&#xff0c;可直接运行。需要直接拍下&#xff0c;拍下后发邮箱。标价为程序价格&#xff0c;不包含售后。程序保证可直接运行。 …

【本科生通信原理】【实验报告】【北京航空航天大学】实验一:通信原理初步

一、实验目的&#xff1a; 熟悉 MATLAB开发环境、掌握 MATLAB基本运算操作&#xff1b;熟悉和了解 MATLAB图形绘制基本指令&#xff1b;熟悉使用 MATLAB分析信号频谱的过程&#xff1b;掌握加性白高斯噪声信道模型 二、实验内容&#xff1a; 三、实验程序&#xff1a; 1、 f…

爬取彼案壁纸

代码展现&#xff1a; 具体代码&#xff1a; import requests import re import os filename 壁纸\\ if not os.path.exists(filename): os.mkdir(filename) for i in range(2,11): url fhttp://www.netbian.com/index_{i}.htm headers {User-Agent: …

日常测试工作中哪些是必须知道的 SQL 语句?

SQL 简介 SQL(Structured Query Language&#xff0c;结构化查询语言)是一套用于管理关系数据库管理系统(RDBMS)&#xff0c;基于 ANSI&#xff08;American National Standards Institute 美国国家标准化组织&#xff09;标准的计算机语言&#xff0c;比较重要的版本是 SQL92…

在Ubuntu22.04上离线部署Tailchat(一)

一&#xff1a;Tailchat介绍 Tailchat 是一款插件化易拓展的开源 IM 应用。可拓展架构赋予 Tailchat 无限可能性。前端微内核架构 后端微服务架构 使得 Tailchat 能够驾驭任何定制化/私有化的场景&#xff0c;是面向企业与私域用户打造&#xff0c;高度自由的群组管理与定制化…

大一,如何成为一名fpga工程师?

​ 1、数电&#xff08;必须掌握的基础&#xff09;&#xff0c;然后进阶学模电&#xff08;选学&#xff09;&#xff0c; 2、掌握HDL&#xff08;HDLverilogVHDL&#xff09;可以选择verilog或者VHDL&#xff0c;建议verilog就行。 3、掌握FPGA设计流程/原理&#xff08;推…

KBDLT2.DLL文件丢失,软件或游戏无法启动,如何解决,试试这些方法,亲测有效

KBDLT2.DLL是Windows操作系统中的一个重要的动态链接库文件&#xff0c;它主要用于支持系统的键盘布局功能&#xff0c;尤其是与立陶宛语相关的键盘布局。 如果KBDLT2.DLL文件缺失或损坏&#xff0c;可能会导致一些问题。例如&#xff0c;当你试图使用立陶宛语键盘布局时&#…

Linux--vim操作

目录 前言 一、vim模式 二、底行模式的操作 三、命令模式的操作 四、替换模式 五、视图模式 六、vim的多文件编译 前言 本文主要讲解了vim的一些使用技巧。帮助我们轻松上手vim。 vim是一种多模式编辑器&#xff0c;通过vim打开文件并对文件进行编辑。 使用vim很简单…

MySQL四大引擎建库建表账号管理

目录 一. 数据库四大引擎 1.1 引擎查看 1.2 InnoDB引擎 1.3 MyISAM引擎 1.4 MEMORY引擎 1.5 Archive引擎 二. 数据库管理 2.1 元数据库 2.2 数据库的增删改查及使用 2.3 权限相关表 三. 数据表管理 3.1 三大范式 3.2 基本数据类型 优化原则 分类 四. 数据库账号…