Visual Studio里的编译、生成与调试

文章目录

  • 一、从源代码到可执行文件的过程
  • 二、Visual Studio里的相关问题
    • 1、解决方案(.sln)是什么,与项目有什么关系?
    • 2、编译、生成和调试的区别
    • 3、生成解决方案和生成项目的区别、生成与重新生成的区别?
    • 4、为什么要分开单独编译

一、从源代码到可执行文件的过程

要从.c或cpp到.exe或.lib或.dll,总体流程可分为三步:1)预编译 。 2)编译和汇编。 3)链接

1)预编译:
这一步主要是把头文件展开、宏定义进行替换、处理#ifdef与#endif等条件编译指令、去掉所有注释。所以,预编译结束后,还是以源代码的形式生成一个临时文件。

2)编译和汇编:
将预编译生成的临时文件,经过词法分析、语法分析、语义分析以及优化和汇编后,编译成若干个目标文件(二进制文件。windows下格式为.obj,Linux下格式为.o)

3)链接
将编译后的目标文件,以及它们所需要的库文件链接在一起,形成一个整体(Windows下,可以是可执行文件exe,可以是静态库lib,也可以是动态库dll)。

二、Visual Studio里的相关问题

1、解决方案(.sln)是什么,与项目有什么关系?

  在创建新项目时,就会看见一个选项:将解决方案和项目放在同一目录中。
  解决方案是一种包含多个项目(如主应用项目、测试项目、库项目等)的容器,它提供了一种组织代码的方式,使多个项目可以协同工作。通常。一个项目只能有一个main函数,不同的项目之间可以有多个main函数,通过 右键项目——设置为启动项 来选定一个项目。总之,通过一个解决方案,就可以管理开发中的所有项目。

2、编译、生成和调试的区别

  首先看“编译”,编译就是将源文件生成obj后缀的二进制文件,单个文件点击编译,只会生成该文件的obj文件。而生成就是链接,产生一个可执行文件(.exe),若某些文件没有编译,则会先进行编译,再链接。调试就是打开.exe文件(若生成的是dll就打不开),如之前有文件没有编译,会先编译,再链接,最后打开。

  总结:VS中,对于一个新项目,直接按调试按键,会进行编译、链接来生成相关obj和exe文件,所以速度较慢。第二次再按调试按键,只会重新编译修改过的源文件,再进行链接生成,所以速度较快。

  (注:当进行了影响编译和链接过程的修改,点“开始调试”,若弹出“无法打开exe文件进行写入"的错误,这可能是链接生成的.exe文件出现问题,需要点“重新生成解决方案”,来重构整个项目。

3、生成解决方案和生成项目的区别、生成与重新生成的区别?

  前面已经说过一个解决方案可以包含多个项目,所以这两种只是“生成”所有项目和单个项目的区别。
  “生成”是指在上一次的生成的基础上,对修改过的文件重新编译,没有修改过文件不会重新编译。“重新生成”是对所有文件都重新编译。

4、为什么要分开单独编译

答:这里存在一个时间问题,现在学习过程写的代码都比较少,编译时间短。但在实际项目中,存在很多大文件,若选择全部重新编译,肯定会花费很多时间。单独编译能让我们只选择需要重新编译的源文件就行。

你可能感兴趣的:(Visual,Studio,visual,studio,ide)