【本文案例采用VS2022版本】
常言道:工欲善其事,必先利其器。初学者虽然不能开发自己的IDE,但至少需要了解自己所用IDE的基本功能和大致实现流程。本文或许可以勉强用作Visual Studio的入门级介绍。
【正文】
基本的新建操作我就不多说了。此处我已新建了一个名为console的解决方案。在console下有一个项目名为test。当解决方案和项目创建好后。我们会看到以下目录:
.sln是solution解决方案的简称。这时我们会想到一个很自然的问题,.sln里面是什么?
为了找到答案,我们选中它单击右键
通过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 你会在主窗口看到如下信息:
解决办法就是在vcxproj里把路径改一下:
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文件,根据笔者朋友的测试,不管有没有这个recipe文件,程序都可以正常运行,甚至于更改该文件的内容,程序都可以正常运行。但是当我们改变recipe文件内容,再重新运行一次程序后,它会生成一个全新的recipe文件。
于是我们姑妄言之,这个文件就是用来记录生成exe过程中所使用的方法,也包括生成exe的路径位置
(上述观点非官方)
至于obj和ilk文件,就要讲到编译的过程了。笔者才疏学浅,知之也不深,就推荐一下这个链接。
最后,简单说一下release和debug方式的区别:
首先,debug通常被称为调试版本,它包含调试信息,并且不做任何优化,便于程序员调试程序。而release是发布版本,它一般是做了优化。从而方便广大用户使用。因此,debug下的exe的往往比release下的exe大很多,而且运行速度也会慢一些。
注意它们的大小
如果要深入了解两者的差别,建议再查一些其他的资料
笔者推荐这一篇
OK,本文到这就结束了。不同的vs版本也许在细节上会有不同之处。
笔者姑妄言之,如本文有不妥之处,烦请指正。
#-----2022年3月30日-----#