news 2026/4/18 7:35:52

cmake_cmake简介

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
cmake_cmake简介

文章目录

  • 第1章 CMake简介
    • 1.1 CMake简介
      • 1.1.1 CMake发展
      • 1.1.2 CMake优势
      • 1.1.3 CMake工作原理
      • 1.1.4 用CMake构建的开源项目
    • 1.2 Windows下安装CMake
    • 1.3 Linux下安装CMake
    • 1.4 Windows下编写第一个cmake项目
      • 1.4.1 第一个CMakeLists.txt文件
      • 1.4.2 CMakeLists.txt 函数说明
        • 1.4.2.1 cmake minimum required()
        • 1.4.2.2 project()用法
        • 1.4.2.3 add_executable()
        • 1.4.2.4 注释
      • 1.4.3 编译步骤
        • 第一步:先构建项目
        • 第二步:生成可执行/库文件
    • 1.5 Linux下编写第一个cmake项目
      • 1.5.1 构建
      • 1.5.2 编译成可执行文件

本文开始记录cmake笔记,先介绍cmake简介,然后介绍cmake安装,最后使用cmake在windows下和Linux编译程序。

第1章 CMake简介

1.1 CMake简介

CMake(Cross-platform Make)是Kitware公司主导的一个开源的、跨平台自动化构建、测试系统。
CMake最初是被设计为各种Makefile方言的生成器,如今的CMake为现代构建系统例如Ninja生成构建文件、也可以为Visual Studio 和Xcode等 IDE 生成项目文件。

1.1.1 CMake发展

CMake 1.0 创建于 2000 年,旨在满足The Insight Toolkit (lTk)和Visualization Toolkit (VTK)对强大的跨平台构建环境的需求。
CMake 2.0 2003年;
CMake 3.0 2013年;
CMake 3.29 2024.03
CMake 4.2.1 支持vs2026

1.1.2 CMake优势

CMake 是事实上的标准软件构建系统,具有以下优势:

  • 跨平台的开源构建系统支持Windows,Linux,macOs等;
  • CMakeLists.txt使用简洁易懂的语法来描述项目的构建过程;
  • 支持复杂的目录层次结构和依赖于多个库的应用程序。
  • 自动查找和配置依赖项第三方库和工具

1.1.3 CMake工作原理

CMake根据CMakeLists.txt文件,将源文件 编译成MakeFile,build.ninja, .vcxproj, .xcodeproj等,然后再生成可执行文件/静态库/动态库。

1.1.4 用CMake构建的开源项目

CMake 广泛用于C 和 C++项目,但它也可以构建其他语言的源代码。比如,OpenCV GUI框架,LLVM编译器等。

1.2 Windows下安装CMake

https://cmake.org/download/
1 找到windows对应的安装包,msi

2 安装的过程就是下一步
中途选择安装到环境变量中。

3 安装完成后,进行测试
测试命令:

(base)C:\Users\Administrator>cmake --version

1.3 Linux下安装CMake

下载地址:

https://github.com/Kitware/CMake/releases


1 解压数据包
压缩完成后,可以看到可执行文件。


在一个新的中断中不可用,此时需要设置一个软连接。
2 添加软链接

sudoln-sf /home/wangandy/桌面/cmake/cmake-3.31.0-rc1-linux-x86_64/bin/* /usr/bin/

ln:创建链接;
-s:soft 表示创建软链接;
-f 如果文件存在,则覆盖;
/usr/bin 当在终端输入一个命令或者按下回车键时,系统会在一些预定义的路径中,比如 /usr/bin 下面查找这个命令。

1.4 Windows下编写第一个cmake项目

在windows下面,cmake构建后会生成 .sln 和 .vcxproj 文件;使用这两个文件就可以生成 .exe程序了。
.sln 文件作用:是vs解决方案的文件,用于管理一个或多个项目;
.vcxproj文件作用:是一个xml文件,包含了项目的配置信息和构建设置。包含了项目的编译和链接选项,优化级别,输出目录等,源文件和头文件;依赖项等。

1.4.1 第一个CMakeLists.txt文件

#include<iostream>usingnamespacestd;intmain(){cout<<"hello world !"<<endl;return0;}

CMakeLists.txt 文件

# 最低版本:设置最低版本为3.29cmake_minimum_required(VERSION3.29)# 项目名称,版本号 和 语言project(firstcmake VERSION1.0.0LANGUAGES CXX)# 生成可执行文件:使用下面的 源文件和头文件生成可执行文件add_executable(firstcmake hello.cpp)

1.4.2 CMakeLists.txt 函数说明

1.4.2.1 cmake minimum required()

要求cmake的最低版本,如果低于这个版本则不能执行。

1.4.2.2 project()用法

project() 命令用于定义项目的名称,并可选择性地指定项目支持的语言和版本。
基本语法:

project(<PROJECT-NAME>[LANGUAGES][<language-name>...])project(<PROJECT-NAME>[VERSION<major>[.<minor>[.<patch>[.<tweak>]]]][DESCRIPTION<project-description-string>][HOMEPAGE_URL<url-string>][LANGUAGES<language-name>...])

常用参数说明
1 项目名称 ():这是必填项。
CMake 会自动定义变量 PROJECT_NAME 和 _SOURCE_DIR 等。
在您的代码中:project(firstcmake) 将项目命名为 firstcmake。
2 版本号 (VERSION):可选。设置项目的版本。
CMake 会自动设置 PROJECT_VERSION、PROJECT_VERSION_MAJOR 等变量。

示例:project(firstcmake VERSION1.0.0)

3 语言 (LANGUAGES):可选。
指定项目使用的编程语言(如 C, CXX (即 C++), CUDA 等)。
如果省略,默认启用 C 和 CXX。
示例:只启用 C++。

project(firstcmake LANGUAGES CXX)
1.4.2.3 add_executable()

使用指定的源文件,编译并链接生成一个可执行程序。
语法:

add_executable(<name>[WIN32][MACOSX_BUNDLE][EXCLUDE_FROM_ALL][source1][source2...])<name>:项目名称。 WIN32:专用于 Windows。如果加上这个标记,程序将以 GUI 应用程序(WinMain 入口)而不是控制台应用程序(main 入口)的方式构建。 MACOSX_BUNDLE:专用于 macOS/iOS。构建为 GUI 应用程序包(.app bundle)。

例如,构建win32程序:

add_executable(MyApp WIN32 main.cpp)
1.4.2.4 注释

单行注释: #
多行注释: #[[ 注释内容 ]]

1.4.3 编译步骤

第一步:先构建项目

生成当前平台下能识别项目文件;语法如下

cmake -B<dir>-B选项: build构建,指定生成的位置为名为build目录 在dir目录下生成本地构建系统能识别的项目文件(Windows下会生成 Visual Studio 的解决方案文件 .sIn 和项目文件 .vcxproj)

查看构建之后的结果:

.vcxproj.filters 文件的作用:管理项目,包含了生成目标的源文件和头文件。
使用VS2022打开工程文件 .sln,里面包含三个工程:

然后,在vs中点击运行,就可以生成可执行文件了。

第二步:生成可执行/库文件

使用第一步构建的项目文件,生成可执行文件。

cmake--build<dir>使用dir目录下的文件 生成 可执行文件。(Windows 上使用 Visual Studio编译器和工具链生成exe)


生成可执行文件。

1.5 Linux下编写第一个cmake项目

写一段C++代码,然后开始编译。

1.5.1 构建

cmake -B build


查看 gcc 和 make的版本

1.5.2 编译成可执行文件

cmake --build build

编译完成后,可执行文件放在了build文件目录下。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 20:48:20

LobeChat能否支持Web Components?组件化开发实践

LobeChat能否支持Web Components&#xff1f;组件化开发实践 在企业级前端架构日益复杂的今天&#xff0c;如何将AI能力以“即插即用”的方式嵌入各类异构系统&#xff0c;成为许多团队面临的真实挑战。设想一下&#xff1a;你正在维护一个基于Vue的老项目、一套React构建的CMS…

作者头像 李华
网站建设 2026/4/13 13:30:01

M9A自动化助手:让《重返未来:1999》从此告别手动肝

M9A自动化助手&#xff1a;让《重返未来&#xff1a;1999》从此告别手动肝 【免费下载链接】M9A 重返未来&#xff1a;1999 小助手 项目地址: https://gitcode.com/gh_mirrors/m9a/M9A 还在为每天重复刷材料、收荒原而烦恼吗&#xff1f;M9A这款专为《重返未来&#xff…

作者头像 李华
网站建设 2026/4/17 0:27:00

小红书种草文案模板:女性用户也爱LobeChat

女性用户也爱LobeChat&#xff1a;当AI助手有了“温度感” 你有没有发现&#xff0c;最近小红书上那些爆款种草文案&#xff0c;语气越来越像闺蜜深夜聊天&#xff1f;语气软萌、表情丰富、话题精准——但背后可能不是某个熬夜写笔记的博主&#xff0c;而是一个叫 LobeChat 的开…

作者头像 李华
网站建设 2026/4/15 11:34:46

C语言中实现Modbus转IEC 60870-5-103协议转换器

协议概述协议特性ModbusIEC 60870-5-103应用领域工业自动化电力系统保护设备数据模型寄存器、线圈信息对象、ASDU通信方式请求-响应主动上报主站查询转换器架构设计 核心数据结构 #include <stdint.h> #include <string.h>// Modbus PDU结构 typedef struct {uint8…

作者头像 李华
网站建设 2026/4/17 14:22:13

从 SEC 定调到资产上链,Synbo 正在搭建下一代金融秩序

SEC 刚刚释放了一个非常强烈的信号&#xff1a;未来两年内&#xff0c;美国金融市场将逐步完成链上化迁移&#xff0c;股票、债券、基金等核心金融资产&#xff0c;都会以数字代币的形式&#xff0c;在区块链基础设施上完成发行、清算和结算。消息出来之后市场非常兴奋&#xf…

作者头像 李华
网站建设 2026/4/15 15:19:01

12 MyBatis的连接池

12 MyBatis的连接池连接池是什么存储连接的容器解决了什么问题如果没有连接池&#xff0c;那么每次都执行SQL语句都会创建connection连接&#xff0c;会浪费时间。影响程序的性能。MyBatis连接池的分类MyBatis内置了连接池技术&#xff0c;dataSource标签的type属性有3个取值PO…

作者头像 李华