首页 > 其他分享 >cmake简介以及入门使用教程

cmake简介以及入门使用教程

时间:2024-11-02 15:19:11浏览次数:5  
标签:教程 cmake 入门 系统 生成 构建 build main

目录

这篇文章是比较简单的入门使用指南,所以很多内容并不会具体展开,主要是为了让一些不懂cmake的人有一个直观的认识,cmake远不止这篇文章里讲的那么简单,cmake非常强大。

cmake是什么

我们都知道要生成一个C++可执行程序或者库,首先要有源码文件,然后使用编译器编译生成,但是复杂项目如果只使用编译器命令构建的话会很麻烦,所以就需要用到构建系统,比如创建vs项目或者使用Makefile等,但是由于C++语言的平台相关性,这些构建系统基本上不能跨平台使用,甚至vs的高版本对低版本的兼容都有一些问题,这就导致可能我们需要创建好几套构建系统,而cmake就是可以解决这个问题的工具。

cmake是一个用来管理源代码构建的工具,cmake本身并不是一个构建系统,但是cmake可以用来生成构建系统,可以根据一些规则生成不同的构建系统,而且在生成构建系统的时候我们可以直接指定编译规则,不需要在生成构建系统之后重新修改,生成的这些构建系统是可以直接使用的,这样就可以让我们很方便的跨平台构建C++项目了。

安装

Windows系统中安装cmake在官网下载安装包按照指引安装就可以,很简单所以就不演示了。

Linux系统也可以在官网下载安装包进行安装,但是使用命令行安装更简单一些,比如Linux发行版Debian系统可以使用命令apt install cmake安装,安装之后可以使用命令cmake --version确认是否安装完成,也很简单所以就不演示了。

简单使用流程

由于cmake是一个用来生成构建系统的工具,而不是构建系统,所以首先我们就需要编写一个CMakeLists.txt文件,cmake也是有一套语言的,CMakeLists.txt就是cmake的源文件,cmake会根据这个CMakeLists.txt文件和我们使用的具体命令来生成一个构建系统。

现在我们生成好构建系统了,那首先我们可以选择直接用这个构建系统来构建项目,比如,如果是生成的vs项目,那直接用vs打开使用就行了,如果是生成的Makefile,那可以直接用make命令构建项目。但是我们还有一种选择,cmake也有相关的命令可以用来使用生成好的构建系统来进行构建,后面会介绍。

一个简单的demo

来看一个可以说是最简单的demo,这个demo使用的是安装了vs2022的Windows环境,用的是vscode编辑器。

先看一下目录结构:

在这里插入图片描述

然后我们来看一下文件内容:

//main.cpp

#include <iostream>

int main()
{
    std::cout << "demo" << std::endl;

    return 0;
}
cmake_minimum_required(VERSION 3.26)

project(demo CXX)

add_executable(main main.cpp)

怎么样,够不够简单。

main.cpp就不用解释了,我们来看一下CMakeLists.txt表达的意思:

  • cmake_minimum_required(VERSION 3.26):指定cmake最低版本,如果使用的cmake低于这个版本,在使用这个CMakeLists.txt生成构建系统的时候就会报错,主要是为了避免CMakeLists.txt有一些低版本不兼容的命令导致出错,任何项目的最顶层CMakeLists.txt都必须从这条命令开始,至于为什么叫做最顶层CMakeLists.txt这篇文章就不具体解释了。
  • project(demo CXX):指定项目名为demo,使用C++语言。
  • add_executable(main main.cpp):指定项目目标是生成可执行程序main,使用的源文件是main.cpp。

知道这些之后现在我们就可以生成构建系统了,在这个目录下执行命令cmake -B build,就可以生成构建系统了,这条命令我们后面会解释的。

在这里插入图片描述

我们可以看到多了一个build文件夹,而且这个文件夹下有一些vs的项目文件,这些就是cmake生成的构建系统了,另外我们也可以指定生成哪种构建系统,如果不指定的话就会自动检测并且使用默认规则。

现在我们来构建项目目标(可执行程序main),我们可以直接使用vs打开demo.sln,然后就很熟悉了,但是这里我们采用另一种方法,使用cmake命令构建。还是在这个目录下,我们执行命令cmake --build build --config Debug就可以了。

在这里插入图片描述

我们可以看到在build文件夹下多了一些内容,并且main.exe也构建出来了。

命令解析

现在我们解释一下前面用到的命令。

cmake -B build:生成构建系统,这条命令有个缺省参数-S指定源码目录,这个源码目录指的是所要使用的顶层CMakeLists.txt文件所在目录,这里不显式指定就是指当前目录,参数-B build指定构建目录为当前目录下的build目录,这个构建目录就是这条命令生成的文件存放的位置。

前面我们说到可以指定生成哪种构建系统,如果需要的话可以使用cmake -G参数指定。

cmake --build build --config Debug:构建项目目标,这条命令会使用生成好的构建系统来构建项目目标,参数build指定构建目录为当前目录下的build目录,这个构建目录就是生成构建系统阶段的构建目录,是同一个,其实就是告诉cmake生成好的构建系统所在位置。参数–config Debug意思是指定为Debug模式,这个参数是多配置构建系统需要的,比如这里用的vs的构建系统。

标签:教程,cmake,入门,系统,生成,构建,build,main
From: https://blog.csdn.net/2401_85919417/article/details/143265724

相关文章

  • Ubuntu零基础入门到精通【3.4讲】:️Ubuntu 软件中心
    目录:......
  • Ubuntu零基础入门到精通【3.3讲】:️使用命令行终端
    目录:......
  • Gpt4最新保姆级教程开通升级
     如何使用WildCard服务注册Claude3随着Claude3的震撼发布,最强AI模型的桂冠已不再由GPT-4独揽。Claude3推出了三个备受瞩目的模型:Claude3Haiku、Claude3Sonnet以及Claude3Opus,每个模型都展现了卓越的性能与特色。其中,Claude3Opus更是实现了对GPT-4的全......
  • Python安装与配置pycharmIDE汉化集活完整教程!
    【一】Python解释器下载【运行环境】【1】Python官网包含编程资料、学习路线图、源代码、软件安装包等!【[点击这里]】![https://www.python.org](官网进不去的可以点击点击领取,100%免费!安装包)【2】Python各版本解释器官网【二】Windows系统安装Python解释器【1】......
  • WPS下双栏排版插入单栏图片教程
    WPS下双栏排版插入单栏图片一、选择要插入图片的位置二、选择页面->分隔符->连续分节符三、在光标处选择页面->分栏->一栏四、插入图片和文字一、选择要插入图片的位置二、选择页面->分隔符->连续分节符三、在光标处选择页面->分栏->一栏变成一栏:四、插入图......
  • yolo-nas无人机高空红外热数据小目标检测(教程+代码)
    前言YOLO-NAS是目前最新的YOLO目标检测模型。从一开始,它就在准确性方面击败了所有其他YOLO模型。与之前的YOLO模型相比,预训练的YOLO-NAS模型能够以更高的准确度检测更多目标。但是我们如何在自定义数据集上训练YOLONAS?这将是我们本文的目标——在自定义数据集上训......
  • Sentinel学习圣经:从入门到精通 Sentinel,最全详解 (40+图文全面总结)
    文章很长,且持续更新,建议收藏起来,慢慢读!疯狂创客圈总目录博客园版为您奉上珍贵的学习资源:免费赠送:《尼恩Java面试宝典》持续更新+史上最全+面试必备2000页+面试必备+大厂必备+涨薪必备免费赠送:《尼恩技术圣经+高并发系列PDF》,帮你实现技术自由,完成职业升级,薪......
  • 公有云开发基础教程
    开启物联网平台首先是开通公共实例;设备接入步骤:1、创建产品与设备;2、为产品定义物模型;3、建立设备与平台的连接;创建产品写完基础产品名称,选择自定义类,结束;添加设备;添加自定义功能,进行物模型配置:配置完成后,点击发布;建立设备与物联网的连接:进入配置,只需要......
  • NLTK模块使用教程
    文章目录NLTK模块使用详解一、NLTK的安装+简介(1)、NLTK安装(2)、NLTK模块功能(3)、NLTK中的语料库(4)、加载语料库(5)、基础语法二、NLTK词频统计(Frequency)三、NLTK去除停用词(stopwords)四、NLTK分词和分句(tokenize)(1)、nltk分句(2)、nltk分词(3)、nltk标记非英语语言文本五、NLTK词......
  • 修改PE导入表注入DLL——实例图文教程——让你看的明明白白
    一、前言其实通过修改PE导入表注入DLL的教程很多,本文也只是其中的沧海一粟而已,但既然写出来,自我感觉应该还是有一点自我的东西的,至少自认为做到了思路清晰,每步都有据可依,让看客应该能做到“看的明明白白”!本贴以《英雄无敌》1游戏程序为例子,向其添加一个DLL,调用其中的导出函数可......