VS2017的C++开发心得(四)VS的文件夹路径以及项目生成步骤

这篇先来理一理VS的文件夹路径,以及几个关键的路径宏。

先看看解决方案根目录:

这个结构很简单,解决方案下一个项目对应一个文件夹,一配置对应一个生成文件夹。

项目文件夹:存放项目的代码、项目配置文件以及项目的中间编译结果,如下:

打开Debug文件夹,看看项目生成的时候产生了哪些东西:

这里要先简单介绍下VS的项目生成步骤。VS的项目生成大致分成四步:分析、编译、链接、生成。

一、分析 这个就是对代码的语法进行一次检查,主要是检查语法错误和一些提醒,这个结果可以在“错误列表”里面查看:

二、编译 没有语法错误后,VS先不管三七二十,把你项目里所有的cpp文件都调用编译器生成一个.obj文件。什么叫项目里的cpp文件:

三、链接 没有特意查过,谈谈自己的理解:编译完了后,VS以main函数所在的obj为根节点进行搜索,在所有的obj中把和main的obj产生关联的编译结果进行一步步扩展。一方面这一步把没用的编译内容进行了删减,另一方面就是对外部变量和函数进行匹配。通常生成过程中的链接错误“LNK XXXX”就出现在这一步:

无法解析的链接错误的解决方法见:VS2017的C++开发心得(八)DLL动态链接——Opencv的使用

顺便说一句,所有在cpp文件下的变量定义和函数定义都是全局的,整个项目都共享(只是项目,不是解决方案)。虽然编译不会有问题,就是在cpp对应的obj下面生成这个变量,但是链接的时候VS就会发现有两个名字一样的变量,又会出现下面的链接错误:

四、生成 这个就是把链接后的结果以生成文件的格式写到该格式的文件里面,也就是第一张图里的生成目录里的exe文件。

接下来再看看生成目录里面有哪些东西:

只需要把.exe文件拷贝出去就可以运行自己的程序或者发给别人运行了,其他的文件都不是必须的。当然这个Debug文件夹下的exe只是调试程序,这些程序有大量对vs的依赖。所以在没有安装对应版本的VS的Windows系统里,这个程序是不能运行的。如何让程序在不安装VS的电脑上运行呢?这个就要以后再说了,至少先把DLL的链接问题说完之后。(程序的独立运行打包见:VS2017的C++开发心得(八)DLL动态链接——Opencv的使用

 

最后说下VS里面的路径宏,之前有介绍过这一页:

点击编辑后会出现新的窗口:

打开宏以后:

路径宏很大的作用是可以根据你的配置名去选择不同的文件夹下面的资源:

看上图,我有不同的配置Debug和Release,他们应该生成在不同的目录下,用路径宏就可以统一起来。

最后介绍一个技巧:让调试目录和生成目录一样。

VS默认项目的调试目录和生成目录是不一样的如下:

输出目录就是生成exe的那个Debug文件夹,工作目录就是调试用的目录。有什么问题呢?如果我的程序都要打开一个文本文件“a.txt”,当你使用“本地Windows调试器”(快捷键F5)运行程序并调试时,你的程序会在调试目录下寻找这个“a.txt”文件,然而当你要双击打开你生成的exe时,它会在输出目录Debug文件夹下查找这个"a.txt"文件。如果你的程序要依赖于某些文件,你又使用的是程序的相对路径(一般没人使用绝对路径),这样你就会发现明明调试可以运行,为什么双击就找不到文件了。所以我在开发的时候一般会把工作目录改为输出目录,如下:

好,这篇就到这里,感兴趣的可以自己去补一补Windows的系统环境变量。

 

 

展开阅读全文

没有更多推荐了,返回首页