Cmake基础教程--第2章:打印信息和变量操作

news2024/9/21 0:39:34

Cmake基础教程--第2章:打印日志和变量操作

  • 概述
  • message打印日志
    • 打印一些CMake自带的信息
  • 变量操作
    • set操作
    • list方法
      • 添加元素
      • 获取长度
      • 查找元素
      • 删除元素
      • 其他操作

概述

CMake项目时基于一个名为 CMakeLists.txt 的文件来构造的,注意大小写不能拼写错误。我们在CMakeLists.txt 中使用CMake Language来编写项目的构建逻辑,其语法类似与命令式编程语言。
执行cmake时,会从根CMakeLists.txt 文件开始执行

message打印日志

我们在编写cmake时,经常有输出日志的需求,可以通过message指令来打印需要的日志消息,如下:

cmake_minimum_required(VERSION 3.20) #最小版本
project(HELLO) #项目名

message("Hello world!")

执行效果如下:
message
可以看到我们成功打印出了Hello World。
message的操作格式比较自由,以下写法都是可以的:

cmake_minimum_required(VERSION 3.20) #最小版本
project(HELLO) #项目名

message("Hello")
message("hello
world")
message(hello)
message(hello
world)
message([[hello world]])

输出如下,读者可以自行感受其输出格式的不同,想要具体了解可以去参考官方的文档,这里不做详细描述。
在这里插入图片描述

打印一些CMake自带的信息

我们可以使用message打印一些CMake自带的信息,取出某个变量的值的时候,需要使用${} 将需要取出值的变量包裹起来,如下:

cmake_minimum_required(VERSION 3.20) #最小版本
project(HELLO) #项目名

message(${CMAKE_VERSION})   # 打印出cmake的版本信息

我们使用${}就可以打印出变量CMAKE_VERSION 对应的值,即cmake的版本信息。CMake自带的变量还有很多,可以自行查找文档,这里不做过多赘述。

变量操作

CMake中的变量有两种,CMake自身提供的变量,或者自定义的变量。*CMake的变量的命名是区分大小写的。*我们可以通过${} 来取得一个变量的值。

set操作

我们可以通过set命令来定义一个变量,并给变量设置一个或多个值,使用message显示时多个变量会连接处理(实际上,这些变量存储时还是使用;分割开的),set命令的格式如下:

set(<variable> <value>...)

实际操作中,我们可以定义变量,其值代表我们需要编译的源文件,方便我们进行管理,如下:

cmake_minimum_required(VERSION 3.20) #最小版本
project(HELLO) #项目名

set(SRC main.cpp)   # 定义变量SRC,其值为main.cpp

message(${SRC})
add_executable(test ${SRC}) #取出变量SRC的值,用于编译生成可执行文件

执行效果如下:
set
使用如下的命令,也可以给变量设置多个值:

set(SRC a.cpp b.cpp)

list方法

list方法提供了对一个变量的多个元素进行更复杂操作的功能,同样,我们也可以使用list来创建变量,我们接下来介绍list 的所有的常见操作。

添加元素

我们可以使用list 方法为一个变量的值列表里面增加元素,格式如下:

list(APPEND <list> <element>...)

使用示例如下:

cmake_minimum_required(VERSION 3.20) #最小版本
project(HELLO) #项目名

set(word a b)
message(${word})

list(APPEND word c d)  # 将元素c,d添加到变量word中
message(${word})

# 输出为 
# ab
# abcd

这里如果我们操作的变量不存在,会创建一个新的变量,和set 的操作基本等价。

获取长度

我们还可以利用list 方法来获取变量值列表的长度,格式如下:

list(LENGTH <list> <outputVar>)

执行后,会创建一个对应名字的变量,里面存储变量列表的长度,可以使用${}获取其值,示例如下:

cmake_minimum_required(VERSION 3.20) #最小版本
project(HELLO) #项目名

set(word a b c d)

list(LENGTH word len)
message(${len})

# 输出4

查找元素

格式如下:

list(FIND <list> <value> <outputVar>)

参数的解释为,value代表你要查找的元素,其下标会存储在outputVar 变量中。注意,cmake的元素下标和主流的编程语言一样,都是从0开始。
示例如下:

cmake_minimum_required(VERSION 3.20) #最小版本
project(HELLO) #项目名

set(word a b c d)

list(FIND word b index)
message(${index})
# 输出为1

删除元素

和查找操作的使用十分相似,这里不多做赘述,直接看范例,我相信你能理解。

# 格式为 list(REMOVE_ITEM <list> <value>)
cmake_minimum_required(VERSION 3.20) #最小版本
project(HELLO) #项目名

set(word a b c d)
message(${word})
list(REMOVE_ITEM word b)	# 删去了元素b
message(${word})

# 输出为
# abcd
# acd

其他操作

list 还能进行一些其他操作,这里统一介绍

list(INSERT <list> <index> <value>) # 向指定下标的位置插入元素
list(REVERSE <list>) # 翻转一个变量的值列表
list(SORT <list>)   # 对变量的值列表进行排序

示例如下,这些操作都很简单,相信你能轻松看懂:

cmake_minimum_required(VERSION 3.20) #最小版本
project(HELLO) #项目名

set(word a b c e)
message(${word})

list(INSERT word 3 d)
message(${word})

list(REVERSE word)
message(${word})

list(SORT word)
message(${word})

输出如下:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2042636.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

线程回收以及线程的问题处理

一、线程结束 1.1、pthread_exit 本身表示结束线程 如果用在main函数中 表示结束主线程 主线程结束并不表示进程 此时执行逻辑&#xff0c;主线程执行流结束&#xff0c;进程会在其余线程都结束后&#xff0c;结束 1.2、return 从线程中返回 线程执行函数执行结束&#x…

让回忆鲜活如初:13.3寸彩色墨水屏电子相框震撼上市

在这个数字化时代&#xff0c;我们习惯了在社交媒体上分享生活的点滴&#xff0c;但那些珍贵的记忆是否也能以更直观的方式呈现&#xff1f;近日&#xff0c;一款全新的13.3寸彩色墨水屏电子相框正式上市&#xff0c;它将以独特的方式让您的回忆鲜活如初。 高清彩色墨水屏&…

三维建模软件:地理信息与遥感领域的智慧构建者

在地理信息与遥感技术的广阔舞台中&#xff0c;建模软件如同一位卓越的建筑师&#xff0c;以数据为砖瓦&#xff0c;智慧为水泥&#xff0c;构建出一个又一个又一个逼真、动态的虚拟世界。本文将深入探究其技术核心、应用实例、未来趋势&#xff0c;揭示建模软件如何在地理信息…

论文干货|AI一键生成论文的AI工具!附使用攻略!速速码住!

在当前的学术研究和写作环境中&#xff0c;AI技术的应用已经变得越来越普遍。特别是在论文写作方面&#xff0c;许多学生和研究人员都在寻找能够提高效率、简化流程的工具。千笔-AIPassPaPer是一款备受推荐的AI论文生成工具&#xff0c;它不仅功能全面&#xff0c;而且用户体验…

Windows、Ubuntu安装mysql

今天我们来学习一下如何在Windows、Ubuntu安装mysql。 Windows安装mysql 第一步&#xff1a;在官网找到需要安装的mysql版本&#xff0c;下载 第二步&#xff1a;下载后打开安装包&#xff0c;进行安装。 点击 “Next”: 默认就行&#xff0c;单击next: 单击“Excute” 等…

Postgresql导入矢量数据

前期准备 工具&#xff1a;PgAdmin&#xff0c;postgis-bundle Postgres安装和postgis安装可以百度别的教程。 创建数据库添加扩展 如图&#xff0c;使用PgAdmin创建名为shp的数据库&#xff0c;并在扩展item中添加postgis扩展。 添加扩展方法可以用查询工具输入以下sql语句&…

贪吃蛇(C语言详解)

贪吃蛇游戏运行画面-CSDN直播 目录 贪吃蛇游戏运行画面-CSDN直播 1. 实验目标 2. Win32 API介绍 2.1 Win32 API 2.2 控制台程序&#xff08;Console&#xff09; 2.3 控制台屏幕上的坐标COORD 2.4 GetStdHandle 2.5 GetConsoleCursorlnfo 2.5.1 CONSOLE_CURSOR_INFO …

免费通配符泛域名SSL证书全自动申请、更新、续期、部署,支持部署到阿里云、腾讯云、ssh主机

CertD&#xff1a;全自动SSL证书管理平台 CertD是一款创新性的开源工具&#xff0c;专注于提供免费且全自动化的SSL证书申请及更新服务。它的命名灵感来源于Linux守护进程的命名方式&#xff0c;“D”代表证书守护进程&#xff08;Certificate Daemon&#xff09;&#xff0c;…

SpringBoot-读取配置文件内容

目录 前言 主页&#xff08;端口号默认8080&#xff09; 1 Value 注解 引用变量的使用 2 Environment 对象 3 ConfigurationProperties &#xff08;配置内容和对象&#xff0c;进行相互绑定&#xff09; 前言 读取配置文件有3 种方式 (1) Value注解 (2) Environm…

基于springboot的网上服装商城

TOC springboot182基于springboot的网上服装商城 第一章 课题背景及研究内容 1.1 课题背景 信息数据从传统到当代&#xff0c;是一直在变革当中&#xff0c;突如其来的互联网让传统的信息管理看到了革命性的曙光&#xff0c;因为传统信息管理从时效性&#xff0c;还是安全性…

C++竞赛初阶L1-11-第五单元-for循环(25~26课)514: T454425 奥运奖牌计数

题目内容 2008 年北京奥运会&#xff0c;A 国的运动员参与了 n 天的决赛项目 (1≤n≤100)。现在要统计一下 A 国所获得的金、银、铜牌数目及总奖牌数。输入第 1 行是 A 国参与决赛项目的天数 n&#xff0c;其后 n 行&#xff0c;每一行是该国某一天获得的金、银、铜牌数目&…

C++ stack与queue的使用与简单实现

目录 0. 适配器 1. stack的简要介绍 2. stack的简单使用 3. queue的简要介绍 4. queue的简单使用 STL标准库中stack和queue的底层结构 deque简单介绍 5. stack的模拟实现 6. queue的模拟实现 0. 适配器 在文章开始前我们先了解一下适配器的概念 适配器是一种设计模式(设计…

【第二节】80x86汇编-寄存器和标志位

目录 前言 一、汇编相关概念 1.1 数据表示与类型 1.2 汇编语言的构成 1.3 存储器及指令、数据 1.4 存储单元 1.5 CPU对存储器的读写操作 1.6 CPU读写内存单元的过程 1.7 intel CPU发展 1.8 8086 内部结构 二、寄存器 2.1 寄存器概览 2.2 32位寄存器 2.3 16位寄存器…

浅谈C语言预处理

文章目录 预处理1、预定义符号2、#define定义标识符和宏A、#define定义标识符B、#define定义宏a、宏的定义b、宏的使用c、宏和函数 3、条件编译4、头文件包含A、两种包含形式B、防止头文件被重复包含 预处理 什么是预处理&#xff1f;预处理是C语言编译的三个过程&#xff08;…

一口气把halcon的所有运算符说清楚

halcon的运算符大体分以下几类 一&#xff1a;赋值运算符&#xff1a; (1) 赋值(:)&#xff08;左边的赋值给右边&#xff09; 二&#xff1a;算术运算符 (1)加()、减(-)、乘(*)、除(/)、求余(%) 三&#xff1a;关系运算符 (3)#、&#xff01; 不等于 四&#xff1a;逻辑运…

java中运算符的详细知识点

算数运算符 a 先赋值再加1 a 先加1在赋值 --的道理是一样的 赋值运算符 1. - * / % 当两侧数据类型不一致时&#xff0c;可以使用自动类型转换或使用 强制类型转换原则 支持连续赋值 - * / % 不会改变基础类型 测试一下&#xff1a; 比较运算符 运算结果为布尔类型 &#x…

Windows上安装WSL,学习Linux

1. 什么是WSL 先说大白话WSL就是让Windows不安装虚拟机可以额外拥有Linux操作系统&#xff0c;以供学习和测试 WSL&#xff08;Windows Subsystem for Linux&#xff09;和WSL2 是微软推出的两个工具&#xff0c;旨在让用户能够在 Windows 操作系统上运行 Linux 的命令行工具…

MySQL数据分析进阶(十四)保护数据库

※食用指南&#xff1a;文章内容为‘CodeWithMosh’SQL进阶教程系列学习笔记&#xff0c;笔记整理比较粗糙&#xff0c;主要目的自存为主&#xff0c;记录完整的学习过程。&#xff08;图片超级多&#xff0c;慎看&#xff01;&#xff09; 【中字】SQL进阶教程 | 史上最易懂S…

Unity游戏开发004:如何在Unity中对物体进行基本操作

Unity游戏开发 “好读书&#xff0c;不求甚解&#xff1b;每有会意&#xff0c;便欣然忘食。” 本文目录&#xff1a; Unity游戏开发 Unity游戏开发前言左侧工具栏概述1. **创建物体**2. **移动&#xff08;Move&#xff09;**3. **旋转&#xff08;Rotate&#xff09;**4. **缩…

注册数据查询工具

注册数据查询工具&#xff1a;ICANN Lookup