??最近因为项目实践,使用VS比较多,在使用过程中遇到并解决了很多问题,因此这里想结合此前记录的一些第三方库配置的文章博客来做一次总结。
Note:这里统一以VS2017 pro为参考,其他版本类似。
??这里的下载安装建议直接到官网下载
打开之后可以看到如下界面:
找到VS 2017 pro的版本,点击下载即可。
如果要下载其他版本,可以改变上面的搜索内容然后重新搜索:
进入这个网页应该是需要登录微软账号
下载好之后,直接双击安装即可:
在选择安装的组件这个界面,左侧是一些大的开发类别,右侧是每个类别对应的一些小的组件。可以根据自己的需要进行选择。比如我这里因为只需要开发C++,所以只勾选了一个:
右下角有安装这些组件所需的空间大小
然后就是耐心等待安装完成:
Enjoy!
??安装完成之后,接下来就是创建项目并开发了。
打开:文件->新建->项目
选择项目类型
??项目创建完成之后,注意观察软件中的文件目录和文件夹目录:
可以发现:
一个解决方案可以包含多个project,而这也是大型项目开发常用的方式,即将项目分为各个模块,每个模块对应一个project
如果解决方案下只有一个project,解决方案的名字不必和project名字相同
编译运行文件叫Debug还是Release取决于解决方案中的属性配置。
每个项目都有头文件和源文件,其位置和实际文件夹的位置并不是一一对应的关系。右键新建文件时是可以选择文件所在路径的。
??这里来简单认识一下软件的一些常用操作。
不用全记下来,知道这里有需要用的时候再来查看就行。
这样可以实现函数声明和定义对照着看,非常方便
需要注意的是,在拖放窗口时是以鼠标所在位置来决定窗口所在位置的。
设置快捷键
??打开“工具=>选项”,直接在搜索框里面搜索“键盘”,然后在显示命令中搜索“注释”,就能看到注释选中内容和取消注释两个。
设置快捷键时,首先选中指令,光标聚焦在“按快捷键”输入框中,再按下键盘快捷键,再点击“分配”,最后点击“确定”即可完成设置。
编辑器文本设置字体和颜色
??打开“工具=>选项”,找到“字体和颜色”,如下图所示
这里建议设置为Fira Code,Consolas等编程字体。
??前面介绍的都是一些基本功能,实际上VS最大的优势在于项目属性配置,极大方便了第三方包的开发。
??在项目上右键,滚动到最底下,找到属性
或者是点击菜单栏 “调试==>xx属性”
就可以打开一个属性配置窗口:
首先要注意的就是上面的“配置”和项目的配置一致:
一般来说,是先设置好项目中的配置,然后打开属性界面,自然就会和项目配置保持一致。切记不要随便改动项目中的配置,如果一定要改,则要重新配置一遍。
这是开始其他配置的基本前提,一定不能对错了,否则配置的完全不能用。
??在了解VS项目属性配置之前,先简单了解一下C++编译运行的基本原理。
??我们都知道,C/C++作为编译型语言,需要经历“编辑==>编译==>链接==>运行”四个步骤。其中链接阶段就是链接除主程序外的库,主要有两种:静态(链接)库和动态(链接)库。
静态库
??静态库在Windows上常用的后缀是.lib
,在Linux系统上后缀是.a
,它是在编译时加载生成目标文件,在运行时对库没有依赖性。一般来说,静态库会有一个对应的头文件,告知编译器.lib文件中有哪些可用的函数接口。
动态库
??动态库在Windows上的后缀是.dll
,在Linux上的后缀是.so
,它是在运行阶段,即已经生成exe执行文件了,exe的执行需要依赖dll文件。
二者的优劣和使用场景
??从上面的介绍可知,静态库需要在编译时加载,这样会导致最后的执行程序非常大,但生成执行文件之后,不再有库依赖的问题。而动态库是在生成目标之后去链接,这样执行程序会比较小,但运行有依赖。
??但是,在实际应用当中,使用动态库的居多。这是因为如果依赖的库有更新的话,使用静态库还需要重新编译软件,而如果使用动态库,只需要更新库,即dll文件即可,更加简便高效。
??有了上述基本理论的支撑,接下来理解项目属性配置中的各种目录就会很简单。
??在“VC++目录”中可以设置各种目录:
但是如果修改这里的包含目录,它的影响是全局的,而如果只修改附加包含目录,只影响当前项目,而对其他项目没有影响。(库目录同理)
因此我们一般不在这里设置,而是设置附加目录:
附加包含目录
附加库目录
附加依赖项
??当包含的第三方依赖较多时,建议在项目目录下分别新建一个include
,lib
,bin
文件夹,分别用来放置头文件(.h),静态库(.lib),动态库(.dll):
然后在项目属性配置中就可以采用相对路径来进行配置了,这样可以保证项目的可移植性。注意这里的相对路径是相对项目目录的:
如果不放心,可以使用VS提供的宏:
附:查看VS宏的方式:
??可以发现,这里的宏其实就是系统环境变量加上VS自定义的宏,比如前面的项目路径等。使用方式都是一样的,就是$(xxxx)
,不过要注意如果是路径的宏定义,要看最后有没有\
,这决定了其子目录要不要加上分隔符。
??最后是工作目录的设置,所谓工作目录,即在软件中运行调试时工作路径,一般来说要设置为包含所有动态库的路径,即运行时所需要的依赖。
这里默认的设置是$(ProjectDir)
,即项目目录,因此,如果动态库较少的情况下,也不用单独创建一个bin文件夹,然后再修改工作目录了。可以直接把dll文件扔到项目目录下。
这里需要注意一点:直接点击生成的执行程序和在VS中点击运行是不一样的,主要差别就在于工作目录的不同,因此如果需要点击运行执行程序,那么就需要把依赖复制到执行程序所在路径下,切记切记。
??可能有些人会有这样的疑问:为什么添加了lib文件所在的路径,还需要指定具体的lib文件呢?包含目录不是也就指定了一个路径吗?其实这个也可以理解,包含目录和库目录都是告诉编译器去哪里找编译时需要的文件,但是在代码中已经指定了要包含哪个文件(#include "xxxx.h"
),而链接库却没有告诉具体要链接哪个,所以还需要指定具体的库文件。
??此外,除了在项目属性配置中设置附加依赖项外,还可以在代码中设置需要链接的库:
#pragma comment(lib,"Ws2_32.lib")
附:
#pragma
据说是最复杂的预编译指令,这里有篇文章总结得相对全,可以参考:Link
??有一些第三方库可能会要求配置环境变量,但是如果每一个库都去配置的话,一是比较麻烦,二是有可能会超出环境变量的长度。因此,对于一些比较特定项目使用的环境变量,可以在项目属性中设置:
设置为:
PATH=路径1;路径2;.....;$(PATH); #这里要以;分割不同的路径
??首先打开属性管理器
注意区分属性窗口和属性管理器,有些可能属性管理器不在其他窗口中,而是在一级子目录。这里建议同时打开,如下所示。
可以看到,当点击属性管理器中某个属性文件时,底下的属性窗口会显示该文件所在路径。很明显,这里自带的属性文件都是全局的文件,为了不污染系统的设置,建议如果有存储属性文件的需求,自己再新建一个属性文件:
然后双击打开,按照自己的需要进行配置。配置好之后,如果其他项目需要相同的配置,则可以选择“添加现有属性表”。这样就实现了一定意义上的“永久配置”
??默认的c++标准应该是C++ 11,可以根据自己的需要设置成更新的版本:
??如果该项目的需要被其他项目使用,比如需要导出dll,那么就可以在这里设置一下:
??VS还有一个很好的功能,那就是支持添加插件,这样可以提供一些自定义的功能。添加插件的方式也很简单:
然后可以在搜索框中搜索:
另外,也可以到微软官方的插件商店去下载,然后本地安装:
https://marketplace.visualstudio.com/
下面介绍几个常用的插件,也会随着后续的使用不断更新。
安装完成之后,可以在选项中找到插件的设置:
包括设置缩进用空格还是tab、缩进字符数、快捷键等。
??如果括号嵌套太多,可能会不知道括号之间的对应关系,为了解决这个问题,可以装一个可以设置彩虹括号的插件——Viasfora,但是很遗憾,VS2017pro在插件中搜索不到这个插件,官方插件网站下载的也无法安装:
通过点击左下角的“查看安装日志”可知,该插件支持的VS版本是[17.0, 18.0)
(左闭右开?):
而VS2017pro对应的版本是15.9.58
:
显然,问题在于这个插件版本太新了,于是,找到该插件的GitHub网站,找了个旧版下载然后安装上了。
??这里主要是总结一些使用过程中的小技巧
??右键文件标签页,选择“打开所在的文件夹”
??当代码中出现类似的语句需要全部替换时,除了使用查找替换,还可以使用VS自带的多光标功能:
注意,这里是按住Alt键,然后拖动鼠标。