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

news/2024/7/16 9:10:44 标签: visual studio, ide

文章目录

  • 一、从源代码到可执行文件的过程
  • 二、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、为什么要分开单独编译

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


http://www.niftyadmin.cn/n/5050131.html

相关文章

C/S架构学习之TCP客户端

TCP客户端的实现流程:一、创建套接字(socket函数):通信域选择IPV4网络协议、流式套接字; int sockfd socket(AF_INET,SOCK_STREAM,0); 二、填充服务器的网络信息结构体(struct sockaddr_in serveraddr&…

H5新特性 滑动选择器input的属性type新值range

文章目录 H5新特性 滑动选择器 input[type"range"]input的type"range"自定义滑动选择框background属性 H5新特性 滑动选择器 input[type“range”] input的type“range” <input type"range"> <style> // 默认样式 input[type&quo…

Linux内核启动流程-第一阶段汇编流程简介

一. Linux启动流程 看完 Linux 内核的顶层 Makefile 以后再来看 Linux 内核的大致启动流程&#xff0c; Linux 内核的启 动流程要比 uboot 复杂的多&#xff0c;涉及到的内容也更多。 本文中&#xff0c;我们就大致的了解一下 Linux 内 核的启动流程。 要分析 Li…

利用CompletableFuture提高接口的响应速度

之前在做一个监控大屏项目的时候&#xff0c;其中有一个图表是展示统计选中设备的指标数据&#xff0c;比如cpu负载、内存使用率等&#xff0c;我们知道&#xff0c;监控数据通常是放在时序数据库里面的&#xff0c;我们当时采用的是国产的tdengin数据&#xff0c;根据tdengin官…

用flex实现grid布局

1. css代码 .flexColumn(columns, gutterSize) {display: flex;flex-flow: row wrap;margin: calc(gutterSize / -2);> div {flex: 0 0 calc(100% / columns);padding: calc(gutterSize / 2);box-sizing: border-box;} }2.用法 .grid-show-item3 {width: 100%;display: fl…

Celery结合flask完成异步任务与定时任务

Celery 常用于 web 异步任务、定时任务等。 使用 redis 作为 Celery的「消息代理 / 消息中间件」。 这里通过Flask-Mail使用qq邮箱延时发送邮件作为示例 pip install celery pip install redis pip install Flask-Mail1、使用flask发送邮件 使用 Flask-Mail 发送邮件需要进行…

WordPress还原重置插件WP Reset 教程!

这是一篇完整的 WordPress 还原教程&#xff0c;我们将使用一款插件&#xff0c;快速重置整个 WordPress 网站。 有时在安装不同主题、网站插件后&#xff0c;可能会导致程序码彼此的冲突&#xff0c;而让网站出现跑版、错误等 ..&#xff0c;这时直接重新来过可能反而比较快一…

微信小程序 TabBar设置

文章目录 一、创建tabbar二、设置进入首页 一、创建tabbar 在app.json中&#xff0c;tabbar按照如下写法设置&#xff0c; "tabBar": {"color": "#8a8a8a","selectedColor": "#1296db","backgroundColor": &quo…