cmake、make、makefile、ninga的关系
CMake是一种跨平台的构建系统,它用来管理软件的编译过程。CMake可以生成本地平台特定的构建文件,例如Makefile或者Microsoft Visual Studio项目文件,以便开发人员更轻松地在不同的平台上构建他们的项目。它的主要功能是配置和生成构建脚本,这些脚本可以在不同的编译器和操作系统上运行。
CMake的功能和特点
- 跨平台支持:CMake支持各种操作系统和编译器,如Windows、Linux、macOS,以及GCC、Clang、MSVC等编译器。
- 生成构建文件:CMake可以生成Makefile、Ninja build文件、Visual Studio项目文件等。
- 模块化和可扩展:CMake使用模块系统,允许用户创建和使用自定义模块和脚本。
- 构建配置:CMake支持构建配置,如调试和发布版本的构建。
- 简化复杂项目的管理:对于大型项目,CMake可以管理多层次和多模块的构建需求。
Makefile和CMake的关系
- Makefile:是一个脚本文件,定义了编译和链接程序所需的规则和依赖关系。Makefile通常与
make工具一起使用。 - CMake:是一个更高级别的工具,它生成构建系统的输入文件(如Makefile)。CMake通过读取配置文件(通常是
CMakeLists.txt)来生成Makefile或其他构建系统的文件。
使用CMake生成Makefile的流程
- 编写CMakeLists.txt文件:定义项目的源文件、目标文件、依赖关系和编译选项等。
- 运行CMake:在命令行中运行
cmake命令,这将解析CMakeLists.txt文件并生成Makefile。 - 运行make:在生成的Makefile所在的目录中运行
make命令,进行实际的编译和构建。
示例
假设我们有一个简单的项目,包含一个源文件main.cpp。我们可以通过以下步骤使用CMake生成Makefile并编译项目:
-
编写CMakeLists.txt文件:
cmake_minimum_required(VERSION 3.10) project(MyProject)set(CMAKE_CXX_STANDARD 11)add_executable(MyExecutable main.cpp) -
运行CMake生成Makefile:
mkdir build cd build cmake .. -
运行make编译项目:
make
通过这些步骤,CMake会生成一个Makefile,然后make工具会根据这个Makefile编译和链接项目。
总结来说,CMake简化了跨平台构建的复杂性,自动生成适合目标平台的构建文件,而Makefile则是其中一种具体的构建文件类型。CMake使得管理复杂项目的构建过程更加高效和可移植。
CMake、Make和Ninja都是与软件构建相关的工具,但它们的角色和功能有所不同,它们之间的关系可以通过以下方式来理解:
CMake
CMake是一种跨平台的构建系统生成器,它的主要功能是生成本地平台特定的构建脚本。 CMake的工作流程如下:
- 编写CMakeLists.txt文件:用户在项目中编写一个或多个
CMakeLists.txt文件,描述项目的源文件、依赖关系、构建选项等。 - 运行CMake:CMake读取
CMakeLists.txt文件,并生成构建系统的输入文件(例如Makefile或Ninja build文件)。 - 选择构建系统:CMake可以生成多种类型的构建系统输入文件,包括Makefile、Ninja build文件、Visual Studio项目文件等。
Make
Make是一个构建自动化工具,最常与Makefile配合使用。Makefile是一种脚本文件,定义了构建项目的规则和依赖关系。Make的工作流程如下:
- 读取Makefile:Make工具读取Makefile文件。
- 执行规则:Make根据Makefile中定义的规则和依赖关系,自动化地执行编译和链接命令,以生成目标文件(如可执行文件或库)。
Ninja
Ninja也是一个构建系统工具,专注于快速、高效的构建过程。与Make类似,Ninja使用自己的构建文件(通常名为build.ninja)来定义构建规则和依赖关系。Ninja的特点包括:
- 高性能:Ninja专为速度优化,能够快速执行并行构建。
- 简单的文件格式:Ninja的构建文件格式简单直接,适合自动生成。
CMake、Make和Ninja的关系
- CMake与Make和Ninja:CMake是一个更高级别的工具,用于生成Make和Ninja使用的构建文件。用户编写CMakeLists.txt文件,然后使用CMake生成Makefile或Ninja build文件。
- Make与Makefile:Make使用Makefile文件来定义构建规则和依赖关系,并执行这些规则以构建项目。
- Ninja与build.ninja文件:Ninja使用
build.ninja文件来定义构建规则和依赖关系,并执行这些规则以构建项目。
工作流程示例
假设我们有一个简单的C++项目,其中有一个main.cpp文件,我们可以通过CMake生成Makefile或Ninja build文件来构建项目:
-
编写CMakeLists.txt文件:
cmake_minimum_required(VERSION 3.10) project(MyProject)set(CMAKE_CXX_STANDARD 11)add_executable(MyExecutable main.cpp) -
生成Makefile:
mkdir build cd build cmake -G "Unix Makefiles" .. make -
生成Ninja build文件:
mkdir build cd build cmake -G "Ninja" .. ninja
在这个示例中,我们首先使用CMakeLists.txt文件定义项目,然后运行CMake以生成适当的构建文件(Makefile或Ninja build文件),最后使用对应的构建工具(Make或Ninja)来进行实际的构建过程。
总结来说,CMake负责生成构建系统的输入文件(如Makefile和Ninja build文件),而Make和Ninja则负责读取这些文件并执行实际的构建过程。CMake提供了一种更高层次的方式来管理和生成这些构建文件,从而简化跨平台构建的复杂性。
相关文章:
cmake、make、makefile、ninga的关系
CMake是一种跨平台的构建系统,它用来管理软件的编译过程。CMake可以生成本地平台特定的构建文件,例如Makefile或者Microsoft Visual Studio项目文件,以便开发人员更轻松地在不同的平台上构建他们的项目。它的主要功能是配置和生成构建脚本&am…...
StarRocks详解
什么是StarRocks? StarRocks是新一代极速全场景MPP数据库(高并发数据库)。 StarRocks充分吸收关系型OLAP数据库和分布式存储系统在大数据时代的优秀研究成果。 1.可以在Spark和Flink里面处理数据,然后将处理完的数据写到StarRo…...
【C语言】进程间通信之管道pipe
进程间通信之管道pipe 一、进程间通信管道pipe()管道的读写行为 最后 一、进程间通信 管道pipe() 管道pipe也称为匿名管道,只有在有血缘关系的进程间进行通信。管道的本质就是一块内核缓冲区。 进程间通过管道的一端写,通过管道的另一端读。管道的读端…...
03.VisionMaster 机器视觉 位置修正 工具
VisionMaster 机器视觉 位置修正 工具 官方解释:位置修正是一个辅助定位、修正目标运动偏移、辅助精准定位的工具。可以根据模板匹配结果中的匹配点和匹配框角度建立位置偏移的基准,然后再根据特征匹配结果中的运行点和基准点的相对位置偏移实现ROI检测…...
Oracle 是否扼杀了开源 MySQL
Oracle 是否无意中扼杀了开源 MySQL Peter Zaitsev是一位俄罗斯软件工程师和企业家,曾在MySQL公司担任性能工程师。大约15年前,当甲骨文收购Sun公司并随后收购MySQL时,有很多关于甲骨文何时“杀死MySQL”的讨论。他曾为甲骨文进行辩护&#…...
机器学习归一化特征编码
特征缩放 因为对于大多数的机器学习算法和优化算法来说,将特征值缩放到相同区间可以使得获取性能更好的模型。就梯度下降算法而言,例如有两个不同的特征,第一个特征的取值范围为1——10,第二个特征的取值范围为1——10000。在梯度…...
抛光粉尘可爆性检测 打磨粉尘喷砂粉尘爆炸下限测试
抛光粉尘可爆性检测 抛光粉尘的可爆性检测是一种安全性能测试,用于确定加工过程中产生的粉尘在特定条件下是否会爆炸,从而对生产安全构成威胁。如果粉尘具有可爆性,那么在生产环境中就需要采取相应的防爆措施。粉尘爆炸的条件通常包括粉尘本身…...
python14 字典类型
字典类型 键值对方式,可变数据类型,所以有增删改功能 声明方式1 {} 大括号,示例 d {key1 : value1, key2 : value2, key3 : value3 ....} 声明方式2 使用内置函数 dict() 创建1)通过映射函数创建字典zip(list1,list2) 继承了序列的所有操作 …...
深入了解 .url文件中的 Prop3属性
在使用 Windows 操作系统时,我们经常会遇到以 .url 结尾的文件,它们通常被用来快速访问互联网上的特定网页。这些文件虽然看起来简单,但其中包含的 Prop3 属性却有其特殊的作用和意义。 1. Prop3 是什么? 在 .url 文件中&#x…...
vue3+vite:动态引入静态图片资源
目录 第一章 前言 第二章 vue2与vue3动态引入静态图片资源 2.1 vue2 webpack动态引入静态图片资源 2.1.1 了解 2.1.2 vue2项目动态引入静态图片资源 2.2 vue3 vite动态引入静态图片资源 2.2.1 了解 2.2.2 require vs import了解 2.2.3 vue3vite 项目动态引入静态图片…...
【K8s】专题五(3):Kubernetes 配置之 ConfigMap 与 Secret 异同
以下内容均来自个人笔记并重新梳理,如有错误欢迎指正!如果对您有帮助,烦请点赞、关注、转发!欢迎扫码关注个人公众号! 目录 一、相同点 二、不同点 一、相同点 功能作用:ConfigMap 与 Secret 都用于存储…...
用Python分析《三国演义》中的人物关系网
用Python分析《三国演义》中的人物关系网 三国演义获取文本文本预处理分词与词频统计引入停用词后进行词频统计构建人物关系网完整代码 三国演义 《三国演义》是中国古代四大名著之一,它以东汉末年到晋朝统一之间的历史为背景,讲述了魏、蜀、吴三国之间…...
k8s上使用ConfigMap 和 Secret
使用ConfigMap 和 Secret 实验目标: 学习如何使用 ConfigMap 和 Secret 来管理应用的配置。 实验步骤: 创建一个 ConfigMap 存储应用配置。创建一个 Secret 存储敏感信息(如数据库密码)。在 Pod 中挂载 ConfigMap 和 Secret&am…...
hexo实战:(二)个人独立博客优化合集
前言 上次介绍了使用 HexoGitHub Pages,零成本搭建一个专属自己的独立博客网站。我觉得那篇文章是没有入门门槛的,不管你是什么行业,只要想打造个人 IP,又不太想受博客平台约束,那么读完后动手操作一下也能轻松完成。…...
PostgreSQL的pg_relation_filepath函数
PostgreSQL的pg_relation_filepath函数 基础信息 OS版本:Red Hat Enterprise Linux Server release 7.9 (Maipo) DB版本:16.2 pg软件目录:/home/pg16/soft pg数据目录:/home/pg16/data 端口:5777在 PostgreSQL 中&…...
Vue开发中Element UI/Plus使用指南:常见问题(如Missing required prop: “value“)及中文全局组件配置解决方案
文章目录 一、vue中使用el-table的typeindex有时不显示序号Table 表格显示索引自定义索引报错信息解决方案 二、vue中Missing required prop: “value” 报错报错原因解决方案 三、el-table的索引值index在翻页的时候可以连续显示方法一方法二 四、vue3中Element Plus全局组件配…...
安装golang
官网:All releases - The Go Programming Language (google.cn) 下载对应的版本安装即可...
Kubernetes面试整理-Kubernetes的主要组件有哪些?
Kubernetes 的主要组件分为控制平面组件和节点组件。以下是每个组件的详细介绍: 控制平面组件 1. API 服务器(kube-apiserver): ● 是 Kubernetes 控制平面的前端,接收、验证并处理所有的 API 请求。 ● 提供集群的管理接口,所有的集群操作都是通过 API 服务器进行的。...
力扣hot100: 48. 旋转图像
LeetCode:48. 旋转图像 受到力扣hot100:54. 螺旋矩阵的启发,我们可以对旋转图像按层旋转,我们只需要记录四个顶点,并且本题是一个方阵,四个顶点就能完成图像的旋转操作。 1、逐层旋转 注意到࿰…...
基于FPGA的VGA协议实现
目录 一、VGA简介 二、VGA引脚的定义 三、VGA显示原理: 四、VESA标准下的VGA时序: 五、VGA显示模式以及相关参数: 六、数字信号与模拟信号的转换 实战演练一:VGA显示彩条 1、实验目标 2、各模块框图及其波形图 3、模块代…...
除了排错,你可能不知道OPC Expert v8.1还能做这些:数据归档、计算与冗余实战
解锁OPC Expert v8.1的隐藏潜力:数据归档、实时计算与冗余架构实战指南在工业自动化领域,OPC Expert常被视为故障排查的"急救箱",但它的能力远不止于此。当大多数工程师还在用它解决DCOM配置问题时,少数先行者已经用它重…...
FT231XQ USB串口桥接板设计解析与实战应用指南
1. 项目概述:从FT232R到FT231XQ的USB串口桥接板演进在嵌入式开发和硬件调试的日常工作中,一个可靠、小巧且功能清晰的USB转串口(UART)桥接板(Breakout Board, 简称BoB)几乎是工程师手边的标配工…...
Unity事件系统实战:用事件驱动重构你的金币拾取逻辑(告别硬编码)
Unity事件系统实战:用事件驱动重构你的金币拾取逻辑(告别硬编码)在游戏开发中,我们经常会遇到这样的场景:玩家拾取金币后,需要更新UI、播放音效、解锁成就、保存数据……如果把这些逻辑全部写在金币拾取的代…...
ComfyUI-Manager完整指南:如何轻松管理你的AI工作流扩展库
ComfyUI-Manager完整指南:如何轻松管理你的AI工作流扩展库 【免费下载链接】ComfyUI-Manager ComfyUI-Manager is an extension designed to enhance the usability of ComfyUI. It offers management functions to install, remove, disable, and enable various c…...
基于SMD与贝壳的微型音频装置:从电路设计到嵌入式开发的完整实践
1. 项目概述:一个藏在贝壳里的声音世界你小时候有没有捡起一个海螺壳,把它贴在耳边,然后听到里面传来“呜呜”的海风声?那个瞬间,仿佛整个海洋都被装进了小小的贝壳里。今天这个项目,就是把那个童年的魔法&…...
HiveWE终极指南:快速掌握魔兽争霸III现代化地图编辑器
HiveWE终极指南:快速掌握魔兽争霸III现代化地图编辑器 【免费下载链接】HiveWE A Warcraft III world editor. 项目地址: https://gitcode.com/gh_mirrors/hi/HiveWE 还在为传统魔兽争霸III地图编辑器缓慢的加载速度和复杂的操作界面而烦恼吗?Hiv…...
问卷数据分析避坑指南:你的验证性因子分析(CFA)模型为什么总拟合不好?
问卷数据分析避坑指南:验证性因子分析(CFA)模型拟合不良的深度诊断 当你满怀期待地将精心设计的问卷数据导入统计软件,准备验证理论模型时,却发现拟合指标一片飘红——卡方值高得离谱,RMSEA超出临界值&…...
CANoe测试效率翻倍:手把手教你用XML Test Module搭建可复用的测试套件
CANoe测试效率翻倍:手把手教你用XML Test Module搭建可复用的测试套件在车载电子系统开发中,测试环节往往占据整个项目周期的40%以上时间。面对频繁的ECU软件迭代和多样化配置需求,传统逐个脚本执行测试的方式已经无法满足敏捷开发的要求。本…...
Lilishop:基于Spring Boot3的B2B2C开源商城系统全解析
引言在数字化转型浪潮席卷各行各业的今天,电商系统已成为企业拓展线上业务的核心基础设施。然而,从零构建一套功能完备、性能卓越、可扩展的商城系统,不仅需要投入大量研发资源,还面临技术选型、架构设计、安全合规等诸多挑战。开…...
别再只会用top了!Linux网络实时监控神器iftop保姆级教程(含常用快捷键与过滤技巧)
从top到iftop:Linux网络流量监控的终极实战指南如果你已经熟练使用top命令监控系统资源,却对网络流量分析感到无从下手,那么iftop将成为你工具箱中不可或缺的神器。就像top之于CPU和内存,iftop专为实时网络监控而生,它…...
