C++编译相关学习笔记

1.编译是什么?

简单的说,就是将文本文件转化为obj对象。详细的说包含以下三个步骤:
(1)预处理代码。常用的预处理语句包含#include、if、ifdef、pragma。经过这一阶段 main.cpp变为main.i
这种文件里的内容就是在原文件的基础上做点修改,比如include 就是把这个库里面几千行代码加上去。就是说,如果你main.cpp只写了几行,include 后,你预处理后生成的main.i文件就有几千行了。

(2)词法分析、语法分析、语义分析、优化后,生成汇编代码文件。经过这一阶段main.i变为main.s
这种文件里的内容就是(微机原理学的)那些mov,push,call那些汇编指令构成的。

(3)汇编。将汇编码转化为机器码。经过这一阶段main.s变为main.o
这种文件里的内容全是机器码了,0和1了,只有机器看得懂了。

2.链接是什么?

简单的说,就是“打包”,它将所有的目标文件以及系统组件组合成一个可执行文件。

实际过程中,不会只有一个文件,某个源文件中的函数可能引用了另一个源文件中定义的某个符号(如变量或者函数调用等);在程序中可能调用了某个库文件中的函数,等等。这些问题,经链接程序的处理得以解决。

比如写了两个cpp文件,main_1.cpp main_2.cpp 其中1里面用到了2里面的函数,经过编译后,会生成两个obj文件,然后链接的作用就是帮忙在2里面找1要用的函数,然后两个打包生成一个exe文件。

3.build是什么?

build=编译+链接
1

4.CMake是什么?

CMake是一个跨平台的构建自动化工具,它可以自动生成跨平台的Makefile、Visual Studio等IDE项目、Xcode项目和Ninja build等常见项目文件。CMake的工作方式是通过读取CMakeLists.txt文件中的指令来生成相应的项目文件,从而支持多种编译器、操作系统、硬件架构等,为跨平台开发提供方便。

CMake能够自动检测在系统中已经安装的库和头文件,从而避免了手动配置环境变量和链接库的繁琐工作。此外,CMake还允许开发者自定义编译选项和平台特定的配置,从而使软件可以在多个平台上正确地编译和运行。

CMake还有一个很重要的优点,就是可以与其他构建工具(如make、Visual Studio等)无缝集成。这意味着开发者可以使用CMake来生成构建文件,然后将这些文件用作其他构建工具的输入,从而实现更高效的自动化构建过程。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/499094.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

小红书的几种赚钱方式解读

小红书的七种变现方式: 1.通过小红书蒲公英平台接广告,粉丝数量大于1000的用户可以开通。单条笔记的广告费用从几百元到几十万不等。 2.开设小红书专栏,粉丝数量大于1万的用户可以开通。 3.进行私域变现,将小红书的咨询引导到微信…

02| JVM堆中垃圾回收的大致过程

如果一直在创建对象,堆中年轻代中Eden区会逐渐放满,如果Eden放满,会触发minor GC回收,创建对象的时GC Roots,如果存在于里面的对象,则被视为非垃圾对象,不会被此次gc回收,就会被移入…

IDEA利用鼠标调整字体大小

就可以按住ctrl和鼠标调节代码字体的大小啦! 如果有用,记得给我来个赞~ 谢啦!

AI智能分析网关V4:抽烟/打电话/玩手机行为AI算法及场景应用

抽烟、打电话、玩手机是人们在日常生活中常见的行为,但这些行为在某些场合下可能会带来安全风险。因此,对于这些行为的检测技术及应用就变得尤为重要。今天来给大家介绍一下TSINGSEE青犀AI智能分析网关V4抽烟/打电话/玩手机检测算法及其应用场景。 将监控…

基于springboot+vue的共享汽车管理系统(前后端分离)

博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战,欢迎高校老师\讲师\同行交流合作 ​主要内容:毕业设计(Javaweb项目|小程序|Pyt…

keepalived+HAProxy+MySQL双主实验

keepalivedHAProxyMySQL双主实验 环境准备 node1(HAProxy1):192.168.184.10 node2(HAProxy2):192.168.184.20 node3(MySQL1):192.168.184.30 node4(MySQL2):192.168.184.40 虚拟IP vip:192.168.184.100MySQL部署 在node3执行以下脚本: #!/bin/bash sy…

《汇编语言》- 读书笔记 - 第14章-实验14 访问 CMOS RAM

《汇编语言》- 读书笔记 - 第14章-实验14 访问 CMOS RAM 需求完整代码运行结果 需求 编程,以“年/月/日 时:分:秒”的格式,显示当前的日期、时间。 注意:CMOS RAM 中存储着系统的配置信息,除了保存时间信息的单元外,不…

three.js 向量叉乘cross

效果&#xff1a; 代码&#xff1a; <template><div><el-container><el-main><div class"box-card-left"><div id"threejs"></div><div></div></div></el-main></el-container>…

全网首个GDB移植手册【Howto:Porting the GUN Debugger】翻译

Howto:Porting the GUN Debugger ✍【作者】&#xff1a;电子科大不知名程序员 &#x1f4e3;【说明】&#xff1a;本文是自己在搭建mcore架构GDB时的参考的手册&#xff0c;具有很强的学习指导性&#xff0c;因原文档&#xff08;链接&#xff1a;https://www.embecosm.com/a…

typescript 的数据类型有哪些

&#x1f469; 个人主页&#xff1a;不爱吃糖的程序媛 &#x1f64b;‍♂️ 作者简介&#xff1a;前端领域新星创作者、CSDN内容合伙人&#xff0c;专注于前端领域技术&#xff0c;成长的路上共同学习共同进步&#xff0c;一起加油呀&#xff01; ✨系列专栏&#xff1a;前端面…

react路由基础

1.目录 A. 能够说出React路由的作用 B. 能够掌握react-router-dom的基本使用 C. 能够使用编程式导航跳转路由 D. 能够知道React路由的匹配模式 2.目录 A. React路由介绍 B. 路由的基本使用 C. 路由的执行过程 D. 编程式导航 E. 默认路由 F. 匹配模式 3.react路由介绍 现代…

cmake如何将源文件按照指定的组织方式进行分组,在IDE例如vistual stdio或者xcode项目工程文件中展示和管理这些源文件

1、我们先来看下面的一个项目的结构 TestGroup工程下面的main.cpp同级的有两个文件夹&#xff0c;到时候我们想在IDE比如xcode或者visual stdio2019中也显示这样的结构怎么弄呢(答案是用cmake中的source_group函数) 2、假如没有用source_group生成的xcode工程是怎么样的&#…