首页 > 其他分享 >【CMake】一、CMake 介绍

【CMake】一、CMake 介绍

时间:2024-09-26 20:21:31浏览次数:9  
标签:cmake -- 介绍 world CMake Detecting hello

CMake 基础介绍

1. CMake 介绍

CMake 是一个开源、跨平台的构建系统,主要用于软件的构建、测试和打包。
CMake 使用平台无关的配置文件 CMakeLists.txt 来控制软件的编译过程,并生成适用于不同编译器环境的项目文件。例如,它可以生成 Unix 系统的 Makefile、Windows 下的 Visual Studio 项目文件或 Mac 的 Xcode 工程文件,从而简化了跨平台和交叉编译的工作流程。CMake 并不直接构建软件,而是产生标准的构建文件,然后使用这些文件在各自的构建环境中构建软件。

CMake 有以下几个特点:

  • 开放源代码:使⽤类 BSD 许可发布
  • 跨平台:并可生成编译配置⽂件,在 Linux/Unix 平台,生成 makefile;在苹果平台,可以生成 xcode;在 Windows平台,可以生成 MSVC 的工程文件
  • 能够管理大型项目:KDE4 就是最好的证明
  • 简化编译构建过程和编译过程:Cmake 的⼯具链非常简单:cmake+make
  • 高效率:按照 KDE 官⽅说法,CMake 构建 KDE4 的 kdelibs 要比使用autotools 来构建 KDE3.5.6 的
    kdelibs 快 40%,主要是因为 Cmake 在⼯具链中没有 libtool
  • 可扩展:可以为 cmake 编写特定功能的模块,扩充 cmake 功能

2. CMake 安装

• Ubuntu 22.04 安装 cmake

sudo apt update
sudo apt install cmake

确定 cmake 是否安装成功

cmake --version

查看 cmake 版本,至此,cmake 安装成功。
在这里插入图片描述

3. 入门样例 - Hello-world 工程

创建 hello-world 目录, 并在其目录下创建 main.cpp 源文件和 CMakeLists.txt 文件
在这里插入图片描述
在这里插入图片描述
main.cpp 源文件只是做一个简单的 hello world 打印

#include <iostream>
using namespace std;
int main()
{ 
 std::cout << "hello world" << std::endl;
 return 0;
}

CMakeLists.txt 文件如下

cmake_minimum_required(VERSION 3.0)
project(HELLO)
add_executable(hello main.cpp)

此时我们可以使用 cmake 来构建这个工程, 生成 makefile, 从而编译代码。

# cmake 生成 makefile
root@iZ0jlbsky11kph2fx8q9o7Z:~/hello-world# cmake .
-- The C compiler identification is GNU 11.4.0
-- The CXX compiler identification is GNU 11.4.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done
-- Generating done
-- Build files have been written to: /root/hello-world

# 使用 makefile 编译代码
root@iZ0jlbsky11kph2fx8q9o7Z:~/hello-world# make
[ 50%] Building CXX object CMakeFiles/hello.dir/main.cpp.o
[100%] Linking CXX executable hello
[100%] Built target hello

# 运行可执行文件
root@iZ0jlbsky11kph2fx8q9o7Z:~/hello-world# ./hello 
hello world

我们来看一下 CMakeLists.txt 文件, 这个文件是 cmake 的构建定义文件, 其文件名是大小写相关的。
下面依次介绍一下在该文件中添加的三个指令:

  • cmake_minimum_required:指定使用的 cmake 的最低版本。可选,如果不加会有警告

  • project:定义工程名称, 并可指定工程的版本、工程描述、web 主页地址、支持的语言(默认情况支持所有语言),如果不需要这些都是可以忽略的,只需要指定出工程名字即可。

project(<PROJECT-NAME> [<language-name>...])
project(<PROJECT-NAME>
 [VERSION <major>[.<minor>[.<patch>[.<tweak>]]]]
 [DESCRIPTION <project-description-string>]
 [HOMEPAGE_URL <url-string>]
 [LANGUAGES <language-name>...])
  • add_executable:定义工程会生成一个可执行程序
add_executable(可执行程序名 源文件名)

注意:这里的可执行程序名和 project 中的项目名没有任何关系
源文件名可以是一个也可以是多个,如有多个可用空格或;间隔

# 样式 1 
add_executable(app test1.c test2.c test3.c)
# 样式 2 
add_executable(app test1.c;test2.c;test3.c)
  • cmake 命令:将 CMakeLists.txt 文件编辑好之后,就可以执行 cmake 命令了
# cmake 命令原型
cmake CMakeLists.txt 文件所在路径

当执行 cmake 命令之后,CMakeLists.txt 中的命令就会被执行,所以一定要注意给cmake 命令指定路径的时候一定不能出错。

标签:cmake,--,介绍,world,CMake,Detecting,hello
From: https://blog.csdn.net/W9940/article/details/142575538

相关文章

  • [转]线性代数库介绍
    1、BLAS基础线性代数程序集(BasicLinearAlgebraSubprograms),基于Fortran实现的基本向量乘法,矩阵乘法的一种科学计算函数库,也是一组向量和矩阵运行的接口规范标淮,规范向量之间的乘法、矩阵之间的乘法等,BLAS实际上是将复杂的矩阵、向量运算简化成类似加减乘法一样的简单计算单元,各......
  • linux 操作系统下dig命令的使用和介绍
    linux操作系统下dig命令的使用和介绍dig(DomainInformationGroper)是一个强大的命令行工具,用于查询DNS(域名系统)服务器,获取有关域名及其相关记录的信息。它广泛用于网络管理和故障排除dig命令的基本功能查询DNS信息:dig可以查询各种类型的DNS记录,包括A记录(IP地址)、MX记......
  • ECU电控软件开发及测试介绍
        伴随着电动化、智能化、网联化等技术发展的时代背景,各行各业电子电气架构都在发生深度变革。新型架构逐渐取代传统架构,比如汽车、工程机械、储能、船舶等领域,电子电气架构从传统分布式向域集中式,甚至向着中央集中式发展,控制器功能呈现集中化、复杂化的特点。为了提升开......
  • 自我介绍
    大家好,我叫袁坷炘。我觉得可以用乐观,热情,爱幻想,有点不切实际来形容我。我有一点慢热,一开始可能并不能看出我有多开朗,但是跟我相处久了,就可以发现其实我有点疯,是个戏精,经常随地大小演,嘿嘿。来找我帮忙时我肯定尽我全力,所以我还是比较乐于助人的。至于爱幻想,我经常对自己以后的生活......
  • 《刀剑江湖路》风灵月影怎么打?详细指南攻略介绍
    本攻略旨在帮助玩家更好地理解和运用风灵月影版修改器,以便在这款游戏中获得更加自由和丰富的游戏体验。请注意,使用修改器可能会影响游戏的平衡性和乐趣,建议适度使用以保持游戏的原汁原味。修改器下载安装1.下载地址:访问正规的软件或游戏修改器平台进行下载。2.安装过程:下......
  • JAVA 数据结构与算法 队列的介绍与应用
    一、队列队列是一个有序列表,可以用数组或者链表来实现遵循先入先出的原则。当我们将数据存入队列时称为”addQueue”,addQueue的处理需要有两个步骤:思路分析:将尾指针往后移:rear+1,当front==rear【空】若尾指针rear小于队列的最大下标maxSize-1,则将数据存入rear所......
  • ECU电控软件开发及测试介绍
        伴随着电动化、智能化、网联化等技术发展的时代背景,各行各业电子电气架构都在发生深度变革。新型架构逐渐取代传统架构,比如汽车、工程机械、储能、船舶等领域,电子电气架构从传统分布式向域集中式,甚至向着中央集中式发展,控制器功能呈现集中化、复杂化的特点。为了提升开......
  • 【沃虎干货】沁恒微电子以太网芯片介绍
    沃虎VOOHU采用互联网模式为用户提供产品和方案的数字化选型设计定制提供给客户最优的设计方案坚持为客户创造价值......
  • 南大通用GBase 8s高可用集群架构介绍
    对一些行业关键核心业务应用来说,必须满足7×24小时的不间断服务。这就要求数据库必须具备高可用性以避免数据库节点的单点故障。数据库的高可用架构选择直接影响到业务应用服务可用性的等级。一般行业的关键核心业务要求具备极高可用性,即99.999%的可用性级别。Oracle在高可用架构上......
  • 如何在CMakeList项目中集成GNU Autotools 构建模块
    背景:我有三个工具A,B,C,其中A,B是原先MakeFile编译的工具,C是原先GNUAutotools自动编译的工具。现在希望使用CMakeList统一构建,我的目录如下:||–A|-----/src|-----CMakeList.txt|–B|-----/src|-----CMakeList.txt|–C|-----autoTool|–CMakeList.txt想要起到的效......