0
点赞
收藏
分享

微信扫一扫

浅析 Visual Studio 生成的项目文件

最不爱吃鱼 2022-03-30 阅读 60

【本文案例采用VS2022版本】

常言道:工欲善其事,必先利其器。初学者虽然不能开发自己的IDE,但至少需要了解自己所用IDE的基本功能和大致实现流程。本文或许可以勉强用作Visual Studio的入门级介绍。

【正文】

基本的新建操作我就不多说了。此处我已新建了一个解决方案名为console。在console下有一个项目名为test。当解决方案和项目创建好后。你会看到以下目录:

.sln是solution解决方案的简称。一个很自然的问题就出现了,这里面是啥?我们选中它单击右键

通过code(我安装了VSCode)打开后,可以看到如下界面:

 下面的一大堆信息表示一些全局变量的加载。暂忽略不看。

当我们打开VS,选择打开console解决方案时,打开的其实是sln,VS在sln文件里找到该解决方案的项目属性文件vcxproj,在本例中就是找到这个路径:console\console.vcxproj。接下来一个很自然的问题就是这个vcxproj文件里有什么?它有啥用?

同上,用code打开console.vcxproj后可以看到

 ......(此处省略n行代码。)

 vcxproj里面包含了工程中所有的文件和它们的配置信息。比如上面红线划着的,表示include的路径,它表示,如果要想打开这段源代码(test.cpp),需要在同级目录下找到test.cpp。如果你的cpp换了位置,而vcxproj中没有更改include path的话就会出现这样的情况:

我在vcxproj目录下新建一个test文件夹并把test.cpp放进去

 此时再打开.sln 你会在主窗口看到如下信息:

解决办法就是把路径更改一下:

test.h同理。而除了include path之外,还有警告等级 warning level、库目录、是否用优化等,这些编译信息都在vcxproj中,当我们更改了项目并保存后,vcxproj中对应的信息就会更改,如果不想在vcxproj中手动更改配置,这儿有一个更亲民的方法:

 

 在属性配置页面可以更改项目配置,具体怎么配置不属于本文范畴。如果你真的很想知道如何自己配置环境、导入第三方库之类的,建议搜索一下环境配置方面的内容。网上教程太多了。

而vcxproj.filters

同上,用code打开它:

 filter顾名思义是过滤器,该文件指定哪些属于头文件、哪些是资源文件、哪些是源文件等。

而vcxproj.user

同上,用code打开它:

它是本地化用户喜好配置,记录用户的个性化配置。具体可参考微软官方文档说明。

总结上述,vcxproj中记录的就是一切项目的属性。.sln打开它获取配置属性

此时,项目已经成功打开,并且你已经完成了代码的编写。现在你运行该程序。

现在,如果你是用x64平台生成了exe,那么你会发现多了个x64的文件夹。

点击进入该文件夹

我是以Debug方式生成的exe,所以可执行文件在Debug里

(如果你没有以Release方式编译程序,不会出现下面的Release文件夹,关于Release和Debug方式的区别见后文)

进入Debug文件夹后可以看到:

 其中pdb文件表示Program Debug Database,其中包含了项目调试的具体调试信息。对于小工程来说这些pdb用处不大,我们一般只关注exe。但是,一旦工程量很大,比如一个项目有几千个人在做,编译时间会很长,根据调试信息,可以看出哪些代码是已ok了的。因为只有当所有编译和链接(关于编译和链接等下再提)都完成后,也就是所有pdb文件都生成后,才会生成exe文件。

 刚才我们在x64文件夹里看到了Debug模式下的exe和pdb,但是当我们打开console文件夹,

 

 发现这里也有一个x64文件夹,进入该文件夹后继续进入Debug文件夹可以看到,除了exe和pdb之外,还多了很多东西。

 tlog和log文件是日志文件

那个exe.recipe文件我也不知道是什么,网上也没找到答案...不过可以肯定的一点是,它不是一个可执行文件...

至于obj和ilk文件,就要讲到编译的过程了。笔者才疏学浅,知之也不深,就推荐一下这个链接。

http://t.csdn.cn/LQ8LN

最后,简单说一下release和debug方式的区别:

首先,debug通常被称为调试版本,它包含调试信息,并且不做任何优化,便于程序员调试程序。而release是发布版本,它一般是做了优化。从而方便广大用户使用。因此,debug下的exe的往往比release下的exe大很多,而且运行速度也会慢一些。

 

 注意它们的大小

如果要深入了解两者的差别,建议再查一些其他的资料

笔者推荐这一篇

http://t.csdn.cn/3AM3l

OK,本文到这就结束了。不同的vs版本也许在细节上会有不同之处。笔者才疏学浅,如本文有不妥之处,还请指正。

#-----2022年3月30日-----#

举报

相关推荐

0 条评论