首页 > 其他分享 >【CMake系列】01-CMake是什么

【CMake系列】01-CMake是什么

时间:2024-06-12 13:47:26浏览次数:15  
标签:files 01 系列 Generates deprecated project 构建 Makefiles CMake

在很多开源项目中,经常可以看到CMakeLists.txt 这一文件,依靠它才能完成项目的配置运行过程。那它是什么?

接下来,在这个专栏中,我们将系统学习CMake这一个重要工具。

本专栏的实践代码全部放在 github 上,欢迎 star !!!

如有问题,欢迎留言、或加群【392784757】交流

CMake是什么

CMake是一个构建系统生成工具。将描述构建系统(如:Unix Makefile、Ninja、Visual Studio等)应当如何操作才能编译代码;然后,CMake为所选的构建系统生成相应的指令。
是 更上层的工具 指导构建系统 去构建一个项目,具体的构建 还是调用 构建系统来完成;由于是更上层,可以做到跨平台,实现交叉编译等

默认情况下,Linux 使用的构建系统是 Unix Makefile,Windows 默认 VS,即CMake 指导他们 如何构建,而他们来完成具体的构建

进一步地,还支持涉及项目管理的其他操作,如打包,安装,测试等

构建系统/生成器

什么是构建系统,首先需要理解什么是构建

什么是构建呢?

在一个程序/项目的过程中,我们通常更多的听到

编译(预处理->词法分析->语法分析->语义分析->中间代码生成->优化->目标代码生成)
汇编(转换为机器语言)
链接(目标文件与库文件链接在一起,生成最终可执行文件)

构建,就包括了这些过程;对于一个项目,往往会涉及到更多的 内容,主程序的 构建,静态库,动态库的构建,第三方库的链接等等;对于不同的项目类型,又有所区别;

因此 构建系统 核心就是 完成 这些构建工作 的一个系统;完成构建后,项目也就从代码变成了可执行文件,静态库,动态库等;

同时,cmake 提供 ==--target == 这一参数,可实现部分构建,无需构建整个项目,节省一定时间

cmake --build build --target <target_name>

构建系统 有哪些

各平台常用的

  • linux -> makefile
  • windows -> visual studio
  • macos -> xcode

其他的,Ninja 是快速构建系统,专注与快速的增量构建,相比于Makefile 更简单 更快速

CMake 支持哪些构建系统?【比你预想的要多】

The following generators are available on this platform (* marks default):
  Visual Studio 17 2022        = Generates Visual Studio 2022 project files.
                                 Use -A option to specify architecture.
* Visual Studio 16 2019        = Generates Visual Studio 2019 project files.
                                 Use -A option to specify architecture.
  Visual Studio 15 2017 [arch] = Generates Visual Studio 2017 project files.
                                 Optional [arch] can be "Win64" or "ARM".
  Visual Studio 14 2015 [arch] = Generates Visual Studio 2015 project files.
                                 Optional [arch] can be "Win64" or "ARM".
  Visual Studio 12 2013 [arch] = Deprecated.  Generates Visual Studio 2013
                                 project files.  Optional [arch] can be
                                 "Win64" or "ARM".
  Visual Studio 9 2008 [arch]  = Deprecated.  Generates Visual Studio 2008
                                 project files.  Optional [arch] can be
                                 "Win64" or "IA64".
  Borland Makefiles            = Generates Borland makefiles.
  NMake Makefiles              = Generates NMake makefiles.
  NMake Makefiles JOM          = Generates JOM makefiles.
  MSYS Makefiles               = Generates MSYS makefiles.
  MinGW Makefiles              = Generates a make file for use with
                                 mingw32-make.
  Green Hills MULTI            = Generates Green Hills MULTI files
                                 (experimental, work-in-progress).
  Unix Makefiles               = Generates standard UNIX makefiles.
  Ninja                        = Generates build.ninja files.
  Ninja Multi-Config           = Generates build-<Config>.ninja files.
  Watcom WMake                 = Generates Watcom WMake makefiles.
  CodeBlocks - MinGW Makefiles = Generates CodeBlocks project files
                                 (deprecated).
  CodeBlocks - NMake Makefiles = Generates CodeBlocks project files
                                 (deprecated).
  CodeBlocks - NMake Makefiles JOM
                               = Generates CodeBlocks project files
                                 (deprecated).
  CodeBlocks - Ninja           = Generates CodeBlocks project files
                                 (deprecated).
  CodeBlocks - Unix Makefiles  = Generates CodeBlocks project files
                                 (deprecated).
  CodeLite - MinGW Makefiles   = Generates CodeLite project files
                                 (deprecated).
  CodeLite - NMake Makefiles   = Generates CodeLite project files
                                 (deprecated).
  CodeLite - Ninja             = Generates CodeLite project files
                                 (deprecated).
  CodeLite - Unix Makefiles    = Generates CodeLite project files
                                 (deprecated).
  Eclipse CDT4 - NMake Makefiles
                               = Generates Eclipse CDT 4.0 project files
                                 (deprecated).
  Eclipse CDT4 - MinGW Makefiles
                               = Generates Eclipse CDT 4.0 project files
                                 (deprecated).
  Eclipse CDT4 - Ninja         = Generates Eclipse CDT 4.0 project files
                                 (deprecated).
  Eclipse CDT4 - Unix Makefiles= Generates Eclipse CDT 4.0 project files
                                 (deprecated).
  Kate - MinGW Makefiles       = Generates Kate project files (deprecated).
  Kate - NMake Makefiles       = Generates Kate project files (deprecated).
  Kate - Ninja                 = Generates Kate project files (deprecated).
  Kate - Ninja Multi-Config    = Generates Kate project files (deprecated).
  Kate - Unix Makefiles        = Generates Kate project files (deprecated).
  Sublime Text 2 - MinGW Makefiles
                               = Generates Sublime Text 2 project files
                                 (deprecated).
  Sublime Text 2 - NMake Makefiles
                               = Generates Sublime Text 2 project files
                                 (deprecated).
  Sublime Text 2 - Ninja       = Generates Sublime Text 2 project files
                                 (deprecated).
  Sublime Text 2 - Unix Makefiles
                               = Generates Sublime Text 2 project files
                                 (deprecated).

如何指定 构建系统?通过 -G "Visual Studio 16 2019" 这一参数即可

Linux平台举例

在Linux 平台上CMake默认生成Unix Makefile来构建项目,在运行cmake指令

cmake -B build -S . 

会生成build 目录, 目录下会有 (这一阶段称为 配置阶段)

  1. Makefile: make将运行指令来构建项目。
  2. CMakefile:包含临时文件的目录,CMake用于检测操作系统、编译器等。此外,根据所选的生成器,它还包含特定的文件。
  3. cmake_install.cmake:处理安装规则的CMake脚本,在项目安装时使用。
  4. CMakeCache.txt:如文件名所示,CMake缓存。CMake在重新运行配置时使用这个文件。

然后执行,完成构建(这一过程称为 运行阶段)

cmake --build build 

标签:files,01,系列,Generates,deprecated,project,构建,Makefiles,CMake
From: https://www.cnblogs.com/caibucai/p/18243770

相关文章

  • 【CMake系列】11-CMake Pack
    cmakepack用于将我们的写好的项目打包,发送给使用方;打包后产生的内容有源代码包二进制包平台原生的二进制安装Debian->.debredhat->.rpmmacOS->.dmgwindows->NSIS本专栏的实践代码全部放在github上,欢迎star!!!如有问题,欢迎留言、......
  • 【CMake系列】10-cmake测试集成googletest与第三方库自动化构建
    cmake测试,使用ctest可能不能满足我们的需求,需要我们使用更为强大的第三方测试框架,如googletest,完成项目中的测试工作本篇文章将第三方测试框架googletest,引入,同时也可以作为关于第三方包自动化构建的很好示例,值得学习本专栏的实践代码全部放在github上,欢迎star!!!如......
  • 【CMake系列】10-cmake测试 ctest
    cmake作为一个强大的构建系统指导工具,同时也提供了测试功能,可用于项目的单元测试等,也可以与其他测试框架协作,如googletest,共同完成项目开发中的测试工作,本节我们就来学习如何借助cmake完成测试本专栏的实践代码全部放在github上,欢迎star!!!如有问题,欢迎留言、或加群【392......
  • 【CMake系列】09-cmake install 一般文件 文件夹 代码文件
    上一节,我们学习了项目构建后、目标的安装,本节学习的内容是对于一般文件,文件夹以及源代码的安装本节的文件依然使用file(WRITExxx.xx)来创建,不依赖额外的文件本专栏的实践代码全部放在github上,欢迎star!!!如有问题,欢迎留言、或加群【392784757】交流文件安装CMakeLi......
  • 小宋的SpringCloud学习记录day01
    MybatisPlus条件构造器基于QueryWrapper的查询MybatisPlus中写好的QueryWrapper方法省去了编写复杂sql语句的繁琐,直接把各种条件集成为对应的方法需求:1.查询出名字中带o的,存款大于等于10000的人的id、username、info、balance字段2.更新用户名为jack的用户余额为2000......
  • 【Linux系列】掌握jq:高效处理JSON数据的命令行利器
    jq是一个强大的命令行工具,以其简洁的语法和丰富的功能,成为处理JSON数据的首选。本文旨在通过实战示例,让你迅速上手jq,掌握提取信息、美化输出和数据压缩的核心技能。一、安装jq:开启高效之旅首先,确保你的系统中安装了jq。在大多数Linux发行版中,可以通过包管理器安装,例如:#Ubun......
  • SQL学习-Task01
    SQL语句分为三类:DDL:创建或者删除存储数据用的数据库以及数据库中的表等对象CREATE:创建数据库和表等对象DROP:删除数据库和表等对象ALTER:修改数据库和表等对象的结构DML:用来查询或者变更表中的记录SELECT:查询表中的数据INSERT:向表中插入新数据UPDATE......
  • [DP] [倍增优化] Luogu P1081 [NOIP2012 提高组] 开车旅行
    [NOIP2012提高组]开车旅行题目描述小\(\text{A}\)和小\(\text{B}\)决定利用假期外出旅行,他们将想去的城市从$1$到\(n\)编号,且编号较小的城市在编号较大的城市的西边,已知各个城市的海拔高度互不相同,记城市\(i\)的海拔高度为\(h_i\),城市\(i\)和城市\(j\)之间的距......
  • [20240601]简单探究free list chunk size的分布.txt
    [20240601]简单探究freelistchunksize的分布.txt--//前几天探究探究freelist,无意中发现12c版本freelistchunksize的发生了变化.单独另外写一篇blog.--//我开始分析以为脚本执行有问题,仔细查看12c版本freelistchunksize分布发生了变化.--//我找了以前的11g下的转储,发......
  • CH01_初识C++
    CH01_初识C++第一个C++程序新建项目新建文件编写代码#include<iostream>usingnamespacestd;intmain(){ cout<<"helloworld"<<endl; system("pause"); return0;}运行程序注释作用:在代码中加一些说明和解释,方便阅读代码。两种格式:单行注释://这是......