VS2015属性及其环境介绍

鸣谢:Mr_L_Y

属性页

VC++目录

VC++目录 表示当前VS开发环境的一些设置,其中的包含目录引用目录如下:

  • #include“ ” 的搜索路径是保存在C/C++的附加包含目录,
    #include< > 的搜索路径是保存在是在VC++目录的包含目录。 所以,你如果不想自己的头文件和一大堆Windows的标准库文件混在一起的话,那就在附加包含目录里添加你自己的include文件夹,并且在使用的时候用#include“”.

  • #include< iostream >, 这个iostream文件不用.h后缀也可以被编译器当成头文件来读取。其实头文件对后缀名没有任何要求,你可以是任意后缀,或者像iostream一样不加后缀,都可以编译。只要你的文本格式和语法和头文件一样就行,改成.x文件也可以编译运行

链接器

  • 简单介绍下链接,链接就是把不同的模块的编译结果串联在一起的一种格式要求。如要使用opencv,tensorflow这样的第三方库,就会使用它们的lib和dll,这两个东西就是把编译好的代码以lib和dll
    的格式开放给我们使用,所以在下载好它们的文件后,我们也要在 项目属性页》链接器》常规和输入,这两个里面配置它们的lib。
以 opencv 的配置过程为例,介绍动态链接库的使用
  • C/C++>附加包含目录:添加头文件目录include。头文件告诉我们这个库的结构体定义和函数接口定义,这是让我们可以通过头文件知道代码该怎么写。头文件相当于一片文章(函数)的摘要,知道这篇文章的核心内容。
  • 链接器>附件库目录:添加.lib文件的文件夹路径。lib文件告诉编译器我们使用的这个库的函数在对应名字的dll文件的哪个位置,类似于 lib = 书的目录,dll = 书的内容。
  • 链接器>输入:添加.lib 文件名
  • 经过上述三个步骤,我们知道了在哪个地方(dll 文件路径)找到存放所有函数的目录(lib 文件),以及我们需要用到的函数具有什么功能(函数头文件),但是还是不知道函数功能如何实现的(dll 文件),于是我们还要知道在哪找到dll文件
  • 所幸搜索dll的这个步骤Windows已经帮我们完成了,Windows会在默认的 PATH 的路径下搜索需要的 dll,你需要做的就是将你的dll 路径添加到 PATH 中;还有一种就是把需要用到的 dll 和 调用dll的exe放在一起,系统也会遍历exe所在的目录,这样就能使用 dll 了。

链接器 > 子系统

  • 子系统就是相对于Windows这个母系统来讲的你的程序。它对于你的程序来讲最大的影响是入口函数的规范。入口函数:当你的项目以EXE的格式编译好了以后,双击后Windows所调用的唯一函数。这也是它为什么会放在“链接器”这个属性分类下面。
  • 空项目(默认的是控制台),则入口为main。
  • win32应用,则入口为 winmain
  • 如果选择dll,则入口为 dllmain

链接器 > 调试

  • 系统上面有个调试,这个调试就是指我们的断点调试,单步调试,为什么这东西也在链接器里面?因为所谓的调试就是把编译结果(汇编指令)和我们的代码进行对应,而编译是单向的,对C++来讲是无法从汇编回到原始代码的(有些语言可以)。所以VS的做法是把这种对应关系生成为.pdb文件,调试就像是查字典一样,即链接.pdb文件。补充一点,任何Windows程序都可以基于汇编语言调试,如果想基于源代码调试那么你还需要EXE编译时对应的cpp文件以及.pdb文件。关于调试的更多细节在使用的时候补充。
  • 对于远程调试的时候(例如用异地的exe调试本地的dll, 则需要 pdb

在这里插入图片描述

Debug 和 Release 的区别

  • 代码优化:(1)编译的时候,debug会把所有代码编译,而release只编译对返回值有影响的代码。所以在调试的时候,用debug可以一行一行的调式,而release会优化部分代码,甚至更改执行顺序。(2)其次,很多变量名也是被优化了,跟你原始定义的变量名不一样,这也是为什么在release模式下调试,在监视窗口看到的变量的值不准的原因。
  • 初始值不相同:对于没有赋初值的变量,两种模式的默认初值不相同。

各种文件格式

  • .lib、.pdb、.dll 文件,分别对应链接,调试,运行 这三个过程所需要的文件
  • 属性页内所有的配置信息都保存在本地文件:.vcxproj

外部依赖

  • 动态链接就像dll文件这样,当程序启动的时候在Windows系统PATH路径下查找它需要的dll文件并加载到内存中使用。

  • 而静态链接则没有dll文件,只有lib文件。这些lib文件所包含的代码在VS项目的链接期会被编译到当前的项目文件中,程序在运行的时候就不需要额外加载dll文件。但一般静态链接编译出来的程序都比较大,静态链接对比动态链接也不够灵活,所以目前的项目开发更多用到的是动态链接。

  • PATH下的路径是程序搜索dll的路径之一,如要让你的程序成功搜索到dll,可以把dll所在的路径添加到PATH下面。还有一种就是和调用dll的exe放在一起。网上很多关于dll找不到的回答是让你放到system32下面,其实system32目录就在系统环境变量的PATH下面。

    所以,对于开发者来讲,你要首先了解你开发的程序需要依赖哪些dll文件,然后你要思考发布软件的时候如何保证你的用户的系统中都有这些dll文件。

调试技巧

调试>工作目录 更改为 常规>输出目录

  • 头文件告诉我们这个库的结构体定义和函数接口定义,这是让我们可以通过头文件知道代码该怎么写。
  • lib文件告诉编译器我们使用的这个库的所有的函数的位置在对应名字的dll文件的哪个位置。(可以看到,头文件是写代码用的,lib文件是链接dll用的。而dll文件则是运行我们的程序的时候使用的。)
  • 此外,还需要知道去哪找到dll,开发的时候需要在Path里面添加 dll的路径。发布的时候,只需要将dll放在exe文件夹下即可。

文件夹管理

  • 在资源管理器添加筛选器,只能在VS开发环境上对.h、.cpp文件分类管理,但实际上的代码并没有放在对应的文件夹内,也不存在与筛选器对应的文件夹
  • 只能先创建分类文件夹,把文件挪到这些文件夹后,再添加对应的筛选器
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值