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来生成构建文件,然后将这些文件用作其他构建工具的输入,从而实现更高效的自动化构建过程。

5.如何用Cmake进行编译?

src文件夹中文件结构如下图所示:
2
上图中的ugv_os文件夹中的文件结构如下图所示:
3
可以看到ugv_os里面有CMakeLists.txt文件(注意与上一级目录中的CMakeLists.txt文件相区别,这个文件才是进行自己的工程编译时需要用到的文件),所以cmake需要引用的是这个路径。

编译时,在ugv_os的同级,目录下创建一个build文件夹。在build文件夹中打开终端,输入:

cmake ../ugv_os

运行完之后,再在该终端中输入:

make -j8

完成编译。

6.CMAKE_CURRENT_SOURCE_DIR代表什么?

CMAKE_CURRENT_SOURCE_DIR是CMake定义的一个变量,它代表当前CMakeLists.txt文件所在的目录。在CMake项目中,可以使用这个变量来引用当前目录中的文件。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【论文阅读】TensoRF: Tensorial Radiance Fields 张量辐射场

发表于ECCV2022. 论文地址:https://arxiv.org/abs/2203.09517 源码地址:https://github.com/apchenstu/TensoRF 项目地址:https://apchenstu.github.io/TensoRF/ 摘要 本文提出了TensoRF,一种建模和重建辐射场的新方法。不同于Ne…

大模型基础应用框架(ReACT\SFT\RAG)创新及零售业务落地

如何将大语言模型的强大能力融入实际业务、产生业务价值,是现在很多公司关注的焦点。在零售场,大模型应用也面临很多挑战。本文分享了京东零售技数中心推出融合Agent、SFT与RAG的大模型基础应用框架,帮助业务完成大模型微调、部署和应用&…

三、Distributed DataParallel分布式数据并行原理与应用

帮up宣传一下,优质up值得信赖! B站UP:你可是处女座啊 文章目录 原理一、 DDP二、基本概念三、分布式训练中的通信 实战初始化进程组当前 进程 到底使用哪些数据?模型处理启动改造 loss 打印改造准确率改造数据划分训练前数据打乱…

回溯算法套路③排列型回溯+N皇后【基础算法精讲 16】

46 . 全排列 链接 : . - 力扣&#xff08;LeetCode&#xff09; 思路 : 那么怎么确定选了那个数呢? 这里设置一个used表示i选没选过 ; class Solution { public:vector<vector<int>> ans;vector<int> path;void backtrack(vector<int>nums,vect…

【小白学机器学习6】真实值,观测值,拟合值,以及数据的误差的评价:集中趋势,离散度,形状等

目录 1 世界上有哪几种值&#xff1f;只有3种值 1.1 真值/真实值/理想值/主观值&#xff08;形而上学世界里&#xff09; 1.2 实际值/现实值/观测值/样本值&#xff08;看到的/记录下来的&#xff09; 1.3 拟合值/预测值&#xff08;算出来的&#xff09; 2 对数据的各种…

【树】【异或】【深度优先】【DFS时间戳】2322. 从树中删除边的最小分数

作者推荐 【二分查找】【C算法】378. 有序矩阵中第 K 小的元素 涉及知识点 树 异或 DFS时间戳 LeetCode2322. 从树中删除边的最小分数 存在一棵无向连通树&#xff0c;树中有编号从 0 到 n - 1 的 n 个节点&#xff0c; 以及 n - 1 条边。 给你一个下标从 0 开始的整数数组…

无人机遥感在农林信息提取中的实现方法与GIS融合应用

在新一轮互联网信息技术大发展的现今&#xff0c;无人机、大数据、人工智能、物联网等新兴技术在各行各业都处于大爆发的前夜。为了将人工智能方法引入农业生产领域。首先在种植、养护等生产作业环节&#xff0c;逐步摆脱人力依赖&#xff1b;在施肥灌溉环节构建智慧节能系统&a…

1.1_2 性能指标——速率、带宽、吞吐量

文章目录 1.1_2 性能指标——速率、带宽、吞吐量&#xff08;一&#xff09;速率&#xff08;二&#xff09;带宽&#xff08;三&#xff09;吞吐量 1.1_2 性能指标——速率、带宽、吞吐量 &#xff08;一&#xff09;速率 速率即数据率或称数据传输率或比特率。 速率就是“快…

《数字图像处理(MATLAB版)》相关算法代码及其分析(2)

目录 1 将8连通边界转换为4连通边界 1.1 移除对角线转折 1.2 插入额外像素 2 将边界信息转换为二进制图像 2.1 函数定义 2.2 参数处理和验证 2.3 默认大小参数设置 2.4 根据参数调整边界位置 2.5 生成二进制图像 2.6 错误处理 3 对二值图像边界的跟踪和提取 3.1 函…

Linux运维工具-ywtool默认功能介绍

提示:工具下载链接在文章最后 目录 一.资源检查二.日志刷新三.工具升级四.linux运维工具ywtool介绍五.ywtool工具下载链接 一.资源检查 只要系统安装了ywtool工具,默认就会配置上"资源检查"的脚本资源检查脚本的执行时间:每天凌晨3点进行检查资源检查脚本的检查内容…

激活函数Swish(ICLR 2018)

paper&#xff1a;Searching for Activation Functions 背景 深度网络中激活函数的选择对训练和任务表现有显著的影响。目前&#xff0c;最成功和最广泛使用的激活函数是校正线性单元&#xff08;ReLU&#xff09;。虽然各种手工设计的ReLU替代方案被提出&#xff0c;但由于在…

C# WinForm AndtUI第三方库 Tree控件使用记录

环境搭建 1.在NuGet中搜索AndtUI并下载至C# .NetFramework WinForm项目。 2.添加Tree控件至窗体。 使用方法集合 1.添加节点、子节点 using AntdUI; private void UpdateTreeView() {Tree tvwTestnew Tree();TreeItem rootTreeItem;TreeItem subTreeItem;Dictionary<str…

代码随想录刷题笔记-Day28

1. 重新安排行程 332. 重新安排行程https://leetcode.cn/problems/reconstruct-itinerary/给你一份航线列表 tickets &#xff0c;其中 tickets[i] [fromi, toi] 表示飞机出发和降落的机场地点。请你对该行程进行重新规划排序。 所有这些机票都属于一个从 JFK&#xff08;肯…

centos7安装kafka、zookeeper

安装jdk 安装jdk8 安装zookeeper 在指定目录执行下载命令 我是在/newdisk/zookeeper目录下 wget https://archive.apache.org/dist/zookeeper/zookeeper-3.5.8/apache-zookeeper-3.5.8-bin.tar.gz --no-check-certificate下载好后并解压 tar -zxvf apache-zookeeper-3.5…

[译]BNF 表示法:深入了解 Python 的语法

[译]BNF 表示法&#xff1a;深入了解 Python 的语法 原文&#xff1a;《BNF Notation: Dive Deeper Into Python’s Grammar》 https://realpython.com/python-bnf-notation/ 在阅读Python文档的时候&#xff0c;你可能已经遇到过BNF(Backus–Naur form)表示法&#xff1a; 下…

微软大中华区商业应用事业部高级产品经理张诗源,将出席“ISIG-低代码/零代码技术与应用发展峰会”

3月16日&#xff0c;第四届「ISIG中国产业智能大会」将在上海中庚聚龙酒店拉开序幕。本届大会由苏州市金融科技协会指导&#xff0c;企智未来科技&#xff08;LowCode低码时代、RPA中国、AIGC开放社区&#xff09;主办。大会旨在聚合每一位产业成员的力量&#xff0c;深入探索低…

ClickHouse SQL Reference (四)数据类型

Tuple(T1, T2, …) 元素元组&#xff0c;每个元素都有一个单独的类型。元组必须至少包含一个元素。 元组用于临时列分组。在查询中使用IN表达式时&#xff0c;以及指定lambda函数的某些形式参数时&#xff0c;可以对列进行分组。有关更多信息&#xff0c;请参阅IN操作符和高阶…

MATLAB知识点:while-end循环语句

​讲解视频&#xff1a;可以在bilibili搜索《MATLAB教程新手入门篇——数学建模清风主讲》。​ MATLAB教程新手入门篇&#xff08;数学建模清风主讲&#xff0c;适合零基础同学观看&#xff09;_哔哩哔哩_bilibili 节选自​第4章&#xff1a;MATLAB程序流程控制 除了for-end语…

解决win10系统cmd命令无法使用ssh问题

目录 问题说明&#xff1a;在使用ssh命令连接虚拟机地址时&#xff0c;出现了以下报错&#xff1a;​编辑 解决方法如下&#xff1a; 1.打开Windows设置&#xff0c;搜索点击添加可选功能&#xff1a; 2.点击添加功能&#xff1a; 3.安装Open SSH客户端和Open SSH服务器: …

Kube-Prometheus 监控Istio

推荐 Istio 多集群监控使用 Prometheus&#xff0c;其主要原因是基于 Prometheus 的分层联邦&#xff08;Hierarchical Federation&#xff09;。 通过 Istio 部署到每个集群中的 Prometheus 实例作为初始收集器&#xff0c;然后将数据聚合到网格层次的 Prometheus 实例上。 网…