使用 CMake 和 Ninja 构建 C/C++ 项目的教程

使用 CMake 和 Ninja 构建 C/C++ 项目的教程

CMake 是一个跨平台的开源构建工具,它简化了项目的构建过程。而 Ninja 是一个快速、轻量级的构建系统,与 CMake 配合使用可以提高项目的构建效率。本教程将向你介绍如何使用 CMake 和 Ninja 来构建你的 C/C++ 项目。
在这里插入图片描述

1. 安装 CMake 和 Ninja

首先,确保你的系统中已经安装了 CMake 和 Ninja。你可以使用包管理器进行安装:

  • 在 Ubuntu 上:

    bashCopy code
    sudo apt-get install cmake ninja-build
    
  • 在 macOS 上,使用 Homebrew:

    bashCopy code
    brew install cmake ninja
    
  • 在 Windows 上,你可以使用 CMake 官网 下载并安装 CMake,而 Ninja 则可以通过 GitHub Release 下载预编译的二进制文件。

2. 创建 CMakeLists.txt 文件

在你的项目根目录下创建一个 CMakeLists.txt 文件。这个文件描述了项目的结构和构建过程。

cmakeCopy code
# CMake 最低版本要求
cmake_minimum_required(VERSION 3.12)

# 项目名称
project(MyProject)

# 添加可执行文件
add_executable(MyExecutable main.cpp)

# 添加其他源文件、头文件等

# 指定 C++ 标准
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

3. 创建构建目录

在你的项目根目录外,创建一个用于构建的目录。例如:

bashCopy code
mkdir build
cd build

4. 运行 CMake

在构建目录中运行 CMake 命令:

bashCopy code
cmake -G Ninja ..

这会生成 Ninja 所需的构建文件。

5. 运行 Ninja 构建

在构建目录中运行 Ninja 构建命令:

bashCopy code
ninja

这将编译并构建你的项目。

6. 运行可执行文件

构建完成后,你可以在构建目录中找到生成的可执行文件,然后运行它:

bashCopy code
./MyExecutable

通过按照以上步骤,你就成功使用 CMake 和 Ninja 构建了你的 C/C++ 项目。这个教程提供了一个基础的起点,你可以根据自己项目的需求进一步扩展和优化 CMakeLists.txt 文件。

7. 安装

ninja install

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

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

相关文章

版本控制背景知识

版本控制背景知识 本文是关于 Git 系列文章的导读,我们先介绍一下版本控制的背景知识。 什么是版本控制 版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。它将什么时候、什么人更改了文件的什么内容等信息如实记录下来…

代码随想录算法训练营第一天|数组理论基础、704二分查找、27移除元素

数组理论基础 一维数组 数组中的元素在内存空间中是连续的数组名与数组中第一个元素的地址相同(一维数组)数组的下标从0开始删除数组的元素其实是用后面的元素覆盖掉要删除的元素数组的长度不能改变 二维数组 二维数组是按照行存储的,也是…

Vue入门四(组件介绍与定义|组件之间的通信)

文章目录 一、组件介绍与定义介绍定义1)全局组件2)局部组件 二、组件之间的通信1)父组件向子组件传递数据2)子传父通信 一、组件介绍与定义 介绍 组件(Component)是Vue.js 最强大的功能之一,它是html、css、js等的一个…

STK 特定问题建模(五)频谱分析(第二部分)

文章目录 简介三、链路分析3.1 星地链路干扰分析3.2 频谱分析 简介 本篇对卫星通信中的频谱利用率、潜在干扰对频谱的影响进行分析,以LEO卫星信号对GEO通信链路影响为例,分析星地链路频谱。 建模将从以下几个部分开展: 1、GEO星地通信收发机…

稀疏矩阵的三元组表示----(算法详解)

目录 基本算法包括:(解释都在代码里) 1.创建 2.对三元组元素赋值 3.将三元组元素赋值给变量 4.输出三元组 5.转置(附加的有兴趣可以看看) 稀疏矩阵的概念:矩阵的非零元素相较零元素非常小时&#xff…

极少数据就能微调大模型,一文详解LoRA等方法的运作原理

原文:极少数据就能微调大模型,一文详解LoRA等方法的运作原理 最近和大模型一起爆火的,还有大模型的微调方法。 这类方法只用很少的数据,就能让大模型在原本表现没那么好的下游任务中“脱颖而出”,成为这个任务的专家…

大气精美网站APP官网HTML源码

源码介绍 大气精美网站APP官网源码,好看实用,记事本修改里面的内容即可,喜欢的朋友可以拿去研究 下载地址 蓝奏云:https://wfr.lanzout.com/itqxN1ko2ovi CSDN免积分下载:https://download.csdn.net/download/huayu…

大型语言模型与知识图谱的完美结合:从LLMs到RAG,探索知识图谱构建的全新篇章

最近,使用大型语言模型(LLMs)和知识图谱(KG)开发 RAG(Retrieval Augmented Generation)流程引起了很大的关注。在这篇文章中,我将使用 LlamaIndex 和 NebulaGraph 来构建一个关于费城费利斯队(Philadelphia Phillies)的 RAG 流程。 我们用的是开源的 NebulaGraph 来…

redis 主从同步和故障切换的几个坑

数据不一致 当我们从节点读取一个数据时,和主节点读取的数据不一致,这是因为主从同步的命令是异步进行的,一般情况下是主从同步延迟导致的,为什么会延迟, 主要二个原因 1、网络状态不好 2、网络没问题,从节…

电脑找不到d3dcompiler43.dll怎么修复,教你5个可靠的方法

d3dcompiler43.dll是Windows操作系统中的一个重要动态链接库文件,主要负责Direct3D编译器的相关功能。如果“d3dcompiler43.dll丢失”通常会导致游戏无法正常运行或者程序崩溃。为了解决这个问题,我整理了以下五个解决方法,希望能帮助到遇到相…

怎么给IP证书更换IP地址

IP证书是由CA认证机构颁发的一种数字证书,可以为只有公网IP地址的网站提供数据加密服务。事实上,IP证书不仅可以提供加密传输服务,还可以验证网站的身份,保证数据传输的安全性。相对于传统基于域名的SSL证书,IP证书无需…

k8s-----存储卷(数据卷)

容器内的目录和宿主机的目录进行挂载。 容器的生命状态是短站的,delete删除,k8s用控制创建的pod,delete相当于重启,容器的状态也会回复到初始状态。 一旦回到初始状态,所有的后天编辑的文件都会消失。 容器和节点之间创…

【设计模式】创建型模式之单例模式(Golang实现)

定义 一个类只允许创建一个对象或实例,而且自行实例化并向整个系统提供该实例,这个类就是一个单例类,它提供全局访问的方法。这种设计模式叫单例设计模式,简称单例模式。 单例模式的要点: 某个类只能有一个实例必须…

vscode配置与注意事项

中文设置 https://zhuanlan.zhihu.com/p/263036716 应用搜索输入“Chinese (Simplified) Language Pack for Visual Studio Code”并敲回车键 底部信息窗没有的话 首先使用快捷键ctrlshiftp,Mac用户使shiftcommandp,然后输入settings.json 将下面的选…

C++其他语法总结

目录 《C基础语法总结》《C面向对象语法总结(一)》《C面向对象语法总结(二)》《C面向对象语法总结(三)》 一、运算符重载 运算符重载可以为运算符增加一些新的功能全局函数、成员函数都支持运算符重载常用的运算符重载示例 class Point {…

【前端素材】bootstrap5实现绿色果蔬电商Frutin

一、需求分析 绿色果蔬电商网站是指专门提供绿色、有机、天然果蔬产品在线销售的电子商务平台。这类网站通常提供以下功能: 产品展示和搜索:网站上展示各种绿色果蔬产品的图片、描述、产地等信息。用户可以通过搜索功能查找特定的果蔬产品或根据分类浏览…

我的年度总结(大一程序员的自述)

呀哈喽,我是结衣。 我也来参加这个年度总结的话题咯,喜欢的话可以点个赞哦。 作为一个大一新生,我从1级的编程小白到了现在的2级编程小白。在7月份之前我可以说是完全不了解编程的一位新人,对应电脑的了解也就只会打游戏看电视和浏…

66、python - 代码仓库介绍

上一节,我们可以用自己手写的算法以及手动搭建的神经网络完成预测了,不知各位同学有没有自己尝试来预测一只猫或者一只狗,看看准确度如何? 本节应一位同学的建议,来介绍下 python 代码仓库的目录结构,以及每一部分是做什么? 我们这个小课的代码实战仓库链接为:cv_lea…

安达发|APS排程系统之产品工艺约束

在制造业中,生产计划和排程是至关重要的环节。为了提高生产效率、降低成本并满足客户需求,企业需要采用先进的生产计划和排程系统。APS(Advanced Planning and Scheduling,高级计划与排程)系统是一种集成了多种先进技术…

设计模式-规格模式

设计模式专栏 模式介绍模式特点应用场景规格模式和策略模式的区别和联系代码示例Java实现规格模式Python实现规格模式 规格模式在spring中的应用 模式介绍 规格模式(Specification Pattern)是一种行为设计模式,其目的是将业务规则封装成可重…