编译工具:CMake(一) | 简介与安装
编译工具:CMake(一) | 简介与安装
- 1. CMake简介
- 1.1CMake的特点
- 2. CMake 安装

这个是CMake的图标
1. CMake简介
cmake 是 kitware 公司以及一些开源开发者在开发几个工具套件(VTK)的过程中衍生品,最终形成体系,成为一个独立的开放源代码项目。项目的诞生时间是 2001 年。
其官方网站是 www.cmake.org,可以通过访问官方网站获得更多关于 cmake 的信息。

cmake的流行其实要归功于 KDE4 的开发(似乎跟当年的 svn 一样,KDE 将代码仓库从 CVS 迁移到SVN,同时证明了 SVN 管理大型项目的可用性),在 KDE 开发者使用了近 10 年 autotools之后,他们终于决定为 KDE4 选择一个新的工程构建工具,其根本原因用 KDE 开发者的话来说就是:只有少数几个 “ 编译专家 ” 能够掌握 KDE 现在的构建体系(admin/Makefile.common),在经历了 unsermake, scons 以及cmake 的选型和尝试之后,KDE4 决定使用 cmake 作为自己的构建系统。在迁移过程中,进展异常的顺利,并获得了 cmake 开发者的支持。
所以,目前的 KDE4 开发版本已经完全使用 cmake 来进行构建。像 kdesvn,rosegarden 等项目也开始使用 cmake,这也注定了 cmake 必然会成为一个主流的构建体系。
1.1CMake的特点
cmake 的特点主要有:
-
开放源代码,使用类 BSD 许可发布;

-
跨平台,并可生成 native 编译配置文件,在 Linux/Unix 平台,生成 makefile,在苹果平台,可以生成 xcode,在 Windows 平台,可以生成 MSVC 的工程文件;
-
能够管理大型项目,KDE4 就是最好的证明;
-
简化编译构建过程和编译过程。Cmake 的工具链非常简单:cmake+make;cmake 编写的过程实际上是编程的过程,跟以前使用 autotools 一样,不过你需要编写的是 CMakeLists.txt(每个目录一个) ,使用的是 ” cmake 语言和语法 ” 。
-
高效虑,按照 KDE 官方说法,CMake 构建 KDE4 的 kdelibs 要比使用 autotools 来构建 KDE3.5.6 的 kdelibs 快 40% ,主要是因为 Cmake 在工具链中没有 libtool。
-
可扩展,可以为 cmake 编写特定功能的模块,扩充 cmake 功能。
2. CMake 安装
cmake 目前已经成为各大 Linux 发行版提供的组件,比如 Everest 直接在系统中包含,Fedora 在 extra 仓库中提供,所以,需要自己动手安装的可能性很小。
如果你使用的操作系统(比如 Windows 或者某些 Linux 版本)没有提供 cmake 或者包含的版本较旧,直接从 cmake 官方网站下载安装。
http://www.cmake.org/HTML/Download.html
在这个页面,提供了源代码的下载以及针对各种不同操作系统的二进制下载,可以选择适合自己操作系统的版本下载安装。
对于用的比较多的Linux的ubuntu系统,CMake是Kitware支持的。

ubuntu系统不用自己安装,已在系统中包含。
查看CMake版本可通过下面指令:
cmake --version
终端输出:
cmake version 3.16.3
CMake suite maintained and supported by Kitware (kitware.com/cmake).

相关文章:
编译工具:CMake(一) | 简介与安装
编译工具:CMake(一) | 简介与安装 1. CMake简介1.1CMake的特点 2. CMake 安装 这个是CMake的图标 1. CMake简介 cmake 是 kitware 公司以及一些开源开发者在开发几个工具套件(VTK)的过程中衍生品,最终形成体系,成为一…...
深度学习(34)—— StarGAN(1)
深度学习(34)—— StarGAN(1) 文章目录 深度学习(34)—— StarGAN(1)1. 背景2. 基本思路3. 整体流程4. StarGAN v2(1) 网络结构(2) mapping network(3) style encoder(4)Loss 和之前…...
ES6系列之let、const、箭头函数使用的坑
变量提升块级作用域的重要性箭头函数this的指向rest参数和arguments 1.ECMAScript与Js的关系 2.Babel转码器 Babel是一个广泛使用的ES6转码器,可以将ES6代码转为ES5代码,从而在老版本的浏览器执行。这意味着,你可以用ES6的方式编写程序&…...
4.DNS和负载均衡
文章目录 coreDNS概念部署croeDNS测试 kubernetes多master集群结构master节点部署 负载均衡配置部署nginx做四层反向代理安装高可用 keepalivednginx监控脚本修改k8s中组件的配置文件 coreDNS 概念 coreDNS是kubernetes的默认DNS实现。可以为集群中的service资源创建一个资源名…...
【JavaEE进阶】Spring核心与设计思想
文章目录 一. Spring框架概述1. 什么是Spring框架2. 为什么要学习框架?3. Spring框架学习的难点 二. Spring 核心与设计思想1. 什么是容器?2. 什么是IoC?3. Spring是IoC容器4. DI(依赖注入)5. DL(依赖查找) 一. Spring框架概述…...
实习周记第三周
第二周总结 第二周主要是做了一些PC端细节内容。大的地方改的不多,但是小的细节蛮多。 值得一提的是,第二周做的微信小程序,改了很多逻辑。改逻辑需要与后端进行联调,收获很大,思路也愈发清楚。 记录做了什么是好习…...
11. 使用tomcat中碰到的一些问题
文章目录 问题一:Tomcat的startup.bat启动后出现乱码问题二:一闪而退之端口占用问题三:非端口问题的一闪而退问题四:服务器的乱码和跨域问题问题五: 在tomcat\webapps\下创建文件夹为什么tomcat重启就会丢失问题六:Tom…...
C++解决TCP粘包
目录 TCP粘包问题TCP客户端TCP服务端源码测试 TCP粘包问题 TCP是面向连接的,面向流的可靠性传输。TCP会将多个间隔较小且数据量小的数据,合并成一个大的数据块,然后进行封包发送,这样一个数据包里就可能含有多个消息的数据&#…...
最长快乐前缀——力扣1392
文章目录 题目描述KMP题目描述 KMP class Solution {public:string longestPrefix(string s) {int n = s...
使用java.util.List的containsAll()方法可能导致的问题
今天在偶然之间发现了一个bug,原因居然是使用了containsAll()方法,这个问题很简单,看以下代码就能发现很大的问题。 package collection;import java.util.ArrayList; import java.util.List;/*** author heyunlin* version 1.0*/ public cl…...
在线文本转语音播放 (TTS)
具体请前往:在线文本转语音播放(TTS)...
OPTEE之ARM安全扩展
目录 一、BTI(Branch Target Identification) 二、如何使能OP-TEE core的BTI 三、如何使能TA的BTI 一、BTI(Branch Target Identification) 分支目标识别(BTI)是ARMv8.5(及Armv9.0)扩展,它为间接分支及其目标提供了控制流完整性(CFI)保护,从而有助于限…...
Vue [Day4]
组件的三大组成部分 组件的样式冲突 scoped <style scoped></style>data 是一个函数 components/BaseButton.vue <template><div class"BaseButton"><button click"count--">-</button><span>{{ count }}</…...
google chrome 官方下载
官方渠道: 1、链接直接打开就可以下载,最新版实时更新。 32位(x86):https://dl.google.com/tag/s/installdataindex/update2/installers/ChromeStandaloneSetup.exe 64位(x64):htt…...
Misc取证学习
文章目录 Misc取证学习磁盘取证工具veracryto挂载fat文件DiskGenius 磁盘取证例题[RCTF2019]disk 磁盘[](https://ciphersaw.me/ctf-wiki/misc/disk-memory/introduction/#_2)内存取证工具volatility 内存取证例题数字取证赛题0x01.从内存中获取到用户admin的密码并且破解密码 …...
vue打包到jar资源访问被shiro拦截
1.shiro放发对静态资源的拦截// filterMap.put("/202307171550/**", "anon"); // filterMap.put("/config/**", "anon"); // filterMap.put("/index.html", "anon"); 2.装载资源访问 priva…...
选择排序(指针法)
描述 用选择法对10个整数排序。 输入 输入包含10个整数,用空格分隔。 输出 输出排序后的结果,用空格分隔。 输入样例 1 3 1 4 1 5 9 2 6 5 3 输出样例 1 1 1 2 3 3 4 5 5 6 9 输入样例 2 2 4 6 8 10 12 14 16 18 20 输出样例 2 2 4 6 8 1…...
8.6 day07 休息+剑指offer
文章目录 06从尾到头打印链表03数组中重复的数字04二维数组中的查找05 替换空格06重建二叉树背英语单词,看了二十页 06从尾到头打印链表 从尾到头遍历链表 方法一就是用栈来辅助,栈的结构是先进后出的,将链表中的元素加入到栈中去࿰…...
K8S系列文章 之 容器存储基础 Volume
Volume Volume是容器数据卷。我们经常创建删除一些容器,但有时候需要保留容器中的一些数据,这时候就用到了Volume。它也是容器之间数据共享的技术,可以将容器中产生的数据同步到本地。实际就是把容器中的目录挂载到运行着容器的服务器或个人…...
【CHI】架构介绍
Learn the architecture - Introducing AMBA CHI AMBA CHI协议导论--言身寸 1. AMBA CHI简介 一致性集线器接口(CHI)是AXI一致性扩展(ACE)协议的演进。它是Arm提供的高级微控制器总线架构(AMBA)的一部分。…...
OpenClaw+Qwen3-14b_int4_awq:自动化内容处理与发布流水线
OpenClawQwen3-14b_int4_awq:自动化内容处理与发布流水线 1. 为什么需要自动化内容流水线 作为一个长期与文字打交道的创作者,我每天要处理大量重复性工作:从各个渠道收集素材、整理成结构化内容、撰写初稿、调整格式、最后发布到不同平台。…...
win11操作系统
电脑显卡 是否是DirectX12 使用 DirectX 诊断工具(dxdiag) 按下 Win R,输入 dxdiag, win 11 安装电脑配置要求: 核心硬件配置 处理器:1 GHz 或更快的兼容 64 位处理器(双核心或多核心…...
RK3576开发板调试EC11编码器,一分钟就失灵?原来是XL9535芯片这个引脚没上拉
RK3576开发板EC11编码器调试:XL9535中断引脚上拉缺失引发的"一分钟失灵"之谜 刚拿到RK3576开发板时,我满心期待地接上了EC11旋转编码器进行测试——上电后旋转旋钮,系统响应灵敏,GPIO中断触发准确。但正当我准备庆祝调试…...
2026顶空气体分析仪TOP5|权威评测与选购指南
顶空气体分析仪,又叫顶空残氧仪,主要用于测量封闭容器中顶部空间氧气与二氧化碳的浓度。随着市场需求越来越大,市面上品牌五花八门,新手选购易踩雷、难抉择。本次榜单严格遵循客观数据真实口碑原则,综合公司背景、技术…...
AG-UI协议实战:构建智能体驱动的动态前端交互系统
1. AG-UI协议:智能体与前端交互的新范式 第一次听说AG-UI协议时,我正在为一个电商项目头疼——后台AI生成的商品推荐总需要手动同步到前端,代码里到处是setState和事件监听。直到发现这个协议,才明白原来智能体和前端可以像两个老…...
fSpy完全上手指南:从基础到实战的零门槛教程
fSpy完全上手指南:从基础到实战的零门槛教程 【免费下载链接】fSpy A cross platform app for quick and easy still image camera matching 项目地址: https://gitcode.com/gh_mirrors/fs/fSpy 当你需要将一张普通的2D照片转换为精确的3D场景时,…...
ESP32 ILI9341高性能驱动:64字节DMA突发传输优化
1. 项目概述ILI9341_ESP32 是一款专为 ESP32 平台深度优化的 ILI9341 TFT LCD 显示驱动库。其核心设计目标并非简单实现显示功能,而是在硬件能力边界内榨取极致帧率与响应性能。该库直面 ESP32 的 SPI 总线特性——支持 64 字节一次性突发传输(burst tra…...
IP-Adapter-FaceID在社交媒体中的应用:内容创作与分享
IP-Adapter-FaceID在社交媒体中的应用:内容创作与分享 【免费下载链接】IP-Adapter-FaceID 项目地址: https://ai.gitcode.com/hf_mirrors/h94/IP-Adapter-FaceID IP-Adapter-FaceID是一款基于Stable Diffusion的AI人脸生成工具,它通过面部识别模…...
嵌入式编程规范:提升代码质量与团队协作效率
1. 嵌入式编程规范的重要性作为一名在嵌入式领域摸爬滚打多年的工程师,我深刻体会到代码规范的重要性。记得刚入行时接手过一个老项目,里面混杂着五种不同的命名风格和三套缩进规则,光是理清代码逻辑就花了两周时间。从那以后,我就…...
建筑物缺陷分割图像识别
建筑物缺陷分割图像识别 README 项目概述 建筑物缺陷分割数据集分析数据概览关键信息总数量5213张图像,涵盖类别:裂缝、剥落、锈蚀、污渍数据集数量5200数据集格式YoloVOC;应用价值:支持建筑物缺陷自动分割与识别,用于…...
