C++构建与编译

news2024/12/23 8:21:12

C++构建

一般来讲,写完c++的源文件(src),就需要去编译为:

  1. 可执行文件
  2. 动态库/静态库

那么就遇到了几个问题:

  1. 编译的主机是什么
  2. 代码运行的目标平台是什么

主机

一般来讲工作的机器,Windows或者Linux,推荐Linux,问题少

目标平台

这个有Windows,Linux,Android,主要是Linux和Android

构造规则

  • CMakeLists:一般自己写CMakeLists,然后使用的工具是cmake(将规则转化为makefile,由make去构建),make(将makefile里面的规则提供给gcc,由gcc编译),gcc(不止可以处理c++,还可以处理C、C++、Objective-C、Fortran等),此外,g++一般用作c++的编译器,gcc用作c的编译器;所以源代码与真正的编译器之间(gcc g++)存在着cmake与make;默认是gcc编译器

  • Android.mk:地位跟CMakeLists相似,里面定义了哪些是源文件,哪些是依赖,写好之后,执行ndk-build进行编译;默认情况下,ndk-build使用GCC编译器,但是你也可以使用Clang编译器。在Android.mk文件中,你可以通过设置LOCAL_CLANG变量来指定使用Clang编译器,或者通过设置LOCAL_TOOLCHAIN变量来指定使用其他编译器。实际上也是使用了makefile

  • Android.bp:可以理解为升级版的Android.mk,是将Android.bp文件转换成ninja格文件来编译,Blueprint文件来描述构建规则,也就是使用Blueprint框架来解析,最终转换成Ninja文件,再有相应的编译器编译;最终,Ninja文件才是真正直接控制源码编译的工具

自己的理解
  • 如果是linux下的,直接使用cmake make即可编译出
  • 如果要编译Android,可以使用cmake make(此时需要有对应的ndk,并且在环境中指明),好像是cmake时就指定toolchain
  • 当然可以直接使用ndk-build对Android.mk文件进行处理,命令ndk-build会直接查找当前路径下的android.mk文件
  • 最后一种,就是借助Android源码(AOSP)进行编译,此时一般来说自己的项目只是作为一个组件,需要有一个Android.bp文件来告诉编译规则,命令为mm之类的

C++编译

以上是构建项目时用到的工具,具体的编译器都有默认值,也都可以手动指定
编译器

  • gcc
  • clang

一些层级关系

Linux——

  • cmake——可以生成makefile或者ninja,2种格式的构建文件
    • 处理对象:cmakelists
  • make,ninja:ninja更快
    • makefile,buleprint

安卓——

  • soong——生成ninja构建文件
    • 处理对象:android.bp
  • ndk-build
    • 处理对象:android.mk

编译器——

  • gcc,clang

参考

  • 理解Android.bp
  • Android.bp使用、与Android.mk的区别、对应关系、转换
  • Android编译系统中的Android.bp、Blueprint与Soong

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vMix导播软件使用NDI协议输入输出

前两篇文章一直写NDI,写了NDI在OBS【链接】、芯象【链接】中的使用。有的朋友问在vMix中的用法,今天就详细说说。 vMix在软件导播领域可算大名鼎鼎,功能丰富、工作稳定,支持多种媒体导入。由它衍生出多种产品,如&#…

中考倒计时7个月复习攻略:名师支招,为“长跑”积蓄能量

今天是2023年11月2日,距离2024年中考还有7个月多一点的时间。其实据六分成长了解,很多学校到了初三(九年级)基本上都是奔着中考考试复习的,这一学年基本上是长跑、拉力赛,拼的不只是智力,还有体…

chatgpt接口调用

在线接口文档: https://app.apifox.com/invite?tokensymrLP7sojF6N31kZqnpZ 接口地址 https://chat.xutongbao.top/api/light/chat/createChatCompletion 请求方式 POST 请求参数 token String, 必须 prompt Array, 必须 例子一: 包含上下文 [ { "…

LVGL库入门 01 - 样式

一、LVGL样式概述 1、创建样式 在 LVGL 中,样式都是以对象的方式存在,一个对象可以描述一种样式。每个控件都可以独立添加样式,创建的样式之间互不影响。 可以使用 lv_style_t 类型创建一个样式并初始化: static lv_style_t s…

二分法解决局部最小值问题

二分法解决局部最小值问题 局部最小值问题:(不一定是有序才可以二分的,具有排它性就可以二分) 局部最小就是改数的左侧和右侧的数都比自己大,当然如果位于两端的话,就只考虑一侧。找到有一个这样的数就可以。 一个数组中&#…

推荐游戏《塞尔达传说:旷野之息》

塞尔达传说:旷野之息 播报编辑讨论32上传视频 2017年任天堂企划制作本部开发的动作冒险游戏 3分钟了解荒野之息 03:59 一分钟了解游戏《塞尔达传说: 旷野之息2》 00:57 旷野之息:20-爬雪山找隐藏神庙获攀爬套装部件,踏上沼泽再…

Pytest-Allure及Allure命令使用

一、Allure介绍 Allure是Pytest用于生成测试报告的框架,提供丰富的测试报告功能; 二、Allure安装 Allure安装分为2块,分别是pytest-Allure库安装,本地生成报告并导出的命令行allure安装; 1、pytest-Allure库安装 …

易基因:RRBS等揭示DNA甲基化-肿瘤免疫逃逸-肾上腺皮质癌侵袭的相关性|表观研究

大家好,这里是专注表观组学十余年,领跑多组学科研服务的易基因。 组蛋白修饰对调控染色质结构和基因表达至关重要,组蛋白修饰失调可能导致疾病状态和癌症。染色质结合蛋白BRWD3(Bromodomain and WD repeat-containing protein 3&…

创新驱动发展 国家创新型城市试点名单2006-2018年(已整理DID格式)

数据简介:创新型城市是指在经济、科技和社会方面具有卓越创新能力的城市,这些城市通过提供良好的创新环境和支持系统,吸引和培养创新人才,促进新兴产业发展,推动经济增长和社会进步。创新型城市提供了丰富的就业机会和…

go语言 | grpc原理介绍(一)

参考 https://www.nowcoder.com/discuss/389810396381683712?sourceSSRsearch 这里是b站对应的csdn博客,比较详细的介绍grpc相关原理说明,首先是大概的一个流程图说明。 什么是 RPC ? 远程过程调用(RPC)是计算机科…

嵌入式软件开发:第二部分–七个步骤计划

使用一种工具(仅一种工具)武装自己,您可以在下一个嵌入式项目的质量和交付时间上做出巨大的改进。点击领取嵌入式物联网学习路线 该工具是:绝对承诺对开发代码的方式进行一些小而基本的更改 。 有了改变的意志,今天您…

火山引擎ByteHouse:如何用OLAP引擎提升数字营销效果?

更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群 随着市场竞争的加剧,企业对数字营销投入的效果监测和优化需求日益增强,营销实时监控也成为企业提升运营效率的重要手段。在数字化营销中&…

Django实战项目-学习任务系统-查询列表分页显示

接着上期代码框架,6个主要功能基本实现,剩下的就是细节点的完善优化了。 接着优化查询列表分页显示功能,有很多菜单功能都有查询列表显示页面情况,如果数据量多,不分页显示的话,页面展示效果就不太好。 本…

Pinia介绍及简单示例

Pinia 是一个基于 Vue 3 的状态管理插件,旨在提供一种简单、直观的方式来管理应用程序的状态。与其他状态管理库(如 Vuex)相比,Pinia 更加轻量级、易于使用和可扩展。 Pinia 的主要特点包括: 1. 面向对象的 API&…

超低价:阿里云双11服务器优惠价格表_87元一年起

2023阿里云双十一优惠活动已经开启了,轻量2核2G服务器3M带宽优惠价87元一年、2核4G4M带宽优惠价165元一年,云服务器ECS经济型e实例2核2G3M固定带宽优惠价格99元一年,还有2核4G、2核8G、4核8G、4核16G、8核32G等配置报价,云服务器e…

发票识别神器:自动录入纸质发票信息

在如今数字化的时代,纸质发票的处理变得越来越繁琐和耗时。为了提高工作效率和减少人工错误,自动识别纸质发票信息的软件应运而生,如金鸣表格文字识别系统的“证票识别”识别功能。这类软件通过图像识别和智能算法,能够迅速准确地…

李宏毅机器学习笔记.Flow-based Generative Model(补)

文章目录 引子生成问题回顾:GeneratorMath BackgroundJacobian MatrixDeterminant 行列式Change of Variable Theorem简单实例一维实例二维实例 网络G的限制基于Flow的网络构架G的训练Coupling LayerCoupling Layer反函数计算Coupling Layer Jacobian矩阵计算Coupli…

5.6 TCP可靠传输的实现

思维导图: 5.6.1 TCP可靠传输的实现笔记概述 在TCP/IP模型中,第5.6节讨论了TCP如何通过滑动窗口机制来实现可靠传输。以下是对本节内容的笔记概括,以及关键点的简化解释: 滑动窗口(Sliding Window) 基本概…

按顺序判断对象a和b中第一个不同之处ax和bx【1】ax是否小于等于bx【2】不同处ax是否为空operator.le()

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 按顺序判断对象a和b中 第一个不同之处ax和bx 【1】ax是否小于等于bx 【2】不同处ax是否为空 operator.le() [太阳]选择题 下列代码执行输出结果为True的个数为? import operator pr…

6大场景,玩转ChatGPT!

文章目录 一、故事叙述提问举例 二、产品描述提问举例 三、报告撰写提问举例 四、邮件和信件撰写提问举例 五、新间稿和公告撰写提问举例 六、学术论文和专业文章撰写提问举例 本文是在GPT3.5版本下演示的 我们知道AI技术不仅能够自动生成文章和内容,还可以根据我们…