CMake多行注释以及通过Message打印不同级别日志

news2024/11/24 12:59:30

1 CMake注释

1.1 单行注释

  • CMake中单行注释时以 # 开头。
  •   # 指定CMake最低版本
      cmake_minimum_required(VERSION 3.20)
      
      # 这是注释
      project(myproject)
    

1.2 多行注释

  • 多行注释时,以 #[[ 开头,以 ]] 结尾,中间都可以写注释内容。3.0之前的版本不支持。
  •   # 指定CMake最低版本
      cmake_minimum_required(VERSION 3.20)
      
      #[[
      	这是注释
      	这也是注释
      ]]
      project(myproject)
    

2 CMake Message 日志打印

  • CMake中的Message主要用于打印日志。

2.1 基础日志打印

  • cmake示例
    •   # 指定CMake最低版本
        cmake_minimum_required(VERSION 3.20)
        
        # 工程名
        project(myproject)
        
        # 基础日志打印
        message("===日志打印===")
        message("===arg1===" "===arg2===")
      
  • 打印结果
    • 在这里插入图片描述

2.2 指定日志级别

  • Message支持打印日志级别
  • 日志级别有以下几种
    • FATAL_ERROR: 停止cmake运行和生成
    • SEND_ERROR: cmake继续运行,生成跳过
    • WARNGING: 打印警告信息
    • NOTICE: 日志级别默认为NOTICE
    • STATUS: 针对项目用户的信息
    • VERBOSE: 针对项目用户的详细信息
    • DEBUG
    • TRACE
  • 可通过 –log-level 参数指定日志级别,默认打印的是 STATUS 级别,即 VERBOSE、DEBUG和TRACE级别不会打印,如果要打印,需要通过 --log-level 参数指定。

FATAL_ERROR

  • 打印 FATAL_ERROR 级别的日志后,后面的语句都不会执行。
  • cmake示例
    •   # 指定CMake最低版本
        cmake_minimum_required(VERSION 3.20)
        
        # 工程名
        project(myproject)
        
        # 基础日志打印
        message("===日志打印开始===")
        
        # 日志级别打印
        # 这一句打印后,cmake会停止执行,后面的语句不会再执行
        message(FATAL_ERROR "FATAL_ERROR") 
        message("FATAL_ERROR after")
        
        message("===日志打印结束===")
      
  • 打印结果,可以看到后面的日志没有再打印,cmake停止执行。
    • 在这里插入图片描述

SEND_ERROR

  • 打印 SEND_ERROR 级别的日志后,生成可执行程序或者库文件的语句不会执行,其他语句依旧可以执行。
  • cmake示例
    •   # 指定CMake最低版本
        cmake_minimum_required(VERSION 3.20)
        
        # 工程名
        project(myproject)
        
        # 基础日志打印
        message("===日志打印开始===")
        
        # 日志级别打印
        # 这一句打印后,其他语句会执行,但生成可执行程序或者生成库的语句不会执行
        message(SEND_ERROR "SEND_ERROR") 
        message("SEND_ERROR after")
        
        # 这一句不会执行,不会生成可执行程序
        add_executable(myproject ${PROJECT_SOURCE_DIR}/main.cpp)
        
        # 这一句日志打印依旧可以执行
        message("add_executable after")
      
        message("===日志打印结束===")
      
  • 打印结果
    • 在这里插入图片描述

WARNING

  • 打印WARNING级别日志后,不影响cmake执行,也不影响生成可执行程序和库文件。开发者可自行决定是否处理警告信息。
  • cmake示例
    •   # 指定CMake最低版本
        cmake_minimum_required(VERSION 3.20)
        
        # 工程名
        project(myproject)
        
        # 基础日志打印
        message("===日志打印开始===")
        
        # 日志级别打印
        message(WARNING "WARNING") 
        message("WARNING after")
        
        # 生成可执行程序
        add_executable(myproject ${PROJECT_SOURCE_DIR}/main.cpp)
        
        # 这一句日志打印依旧可以执行
        message("add_executable after")
        
        message("===日志打印结束===")
      
  • 打印结果
    • 在这里插入图片描述

NOTICE

  • 默认的级别就是NOTICE,从NOTICE开始,不会再打印行号。
  • cmake示例
    •   # 指定CMake最低版本
        cmake_minimum_required(VERSION 3.20)
        
        # 工程名
        project(myproject)
        
        # 基础日志打印
        message("===日志打印开始===")
        
        # 日志级别打印
        # 这是 WARNING 级别
        message(WARNING "WARNING")
        # 这是NOTICES级别 
        message(NOTICE "NOTICE")
        
        # 生成可执行程序
        add_executable(myproject ${PROJECT_SOURCE_DIR}/main.cpp)
        
        # 这个也是NOTICE级别
        message("add_executable after")
        
        message("===日志打印结束===")
      
  • 打印结果
    • 在这里插入图片描述
    • 可以看到,WARNING 打印了行号,NOTICE 没有打印行号。

STATUS

  • STATUS级别开始的日志打印时,会在前面加上 符号
  • cmake示例
    •   # 指定CMake最低版本
        cmake_minimum_required(VERSION 3.20)
        
        # 工程名
        project(myproject)
        
        # 基础日志打印
        message("===日志打印开始===")
        
        # 日志级别打印
        # 这是 WARNING 级别
        message(WARNING "WARNING")
        # 这是NOTICES级别 
        message(NOTICE "NOTICE")
        # 这是STATUS级别 
        message(STATUS "STATUS")
        
        
        # 生成可执行程序
        add_executable(myproject ${PROJECT_SOURCE_DIR}/main.cpp)
        
        # 这个也是NOTICE级别
        message("add_executable after")
        
        message("===日志打印结束===")
      
  • 打印结果
    • 在这里插入图片描述

VERBOSE

  • 从VERBOSE开始,默认是不打印的
  • cmake示例
    •   # 指定CMake最低版本
        cmake_minimum_required(VERSION 3.20)
        
        # 工程名
        project(myproject)
        
        # 基础日志打印
        message("===日志打印开始===")
        
        # 日志级别打印
        # 这是 WARNING 级别
        message(WARNING "WARNING")
        # 这是NOTICES级别 
        message(NOTICE "NOTICE")
        # 这是STATUS级别 
        message(STATUS "STATUS")
        # 这是VERBOSE级别 
        message(VERBOSE "VERBOSE")
        
        # 生成可执行程序
        add_executable(myproject ${PROJECT_SOURCE_DIR}/main.cpp)
        
        # 这个也是NOTICE级别
        message("add_executable after")
        
        message("===日志打印结束===")
      
  • 打印结果
    • 在这里插入图片描述
    • 可以看到 VERBOSE 级别日志并没有打印
    • 如果要打印 VERBOSE 级别日志,需要通过 –log-level 参数指定
    • 在这里插入图片描述

DEBUG和TRACE

  • DEBUG和TRACE级别日志默认也是不打印,如果需要打印,通过 --log-level 参数指定日志级别,这里就不再介绍了。

2.3 将打印结果重定向到文件中

  • 可以将cmake日志重定向到文件中

  • cmake示例

    •   # 指定CMake最低版本
        cmake_minimum_required(VERSION 3.20)
        
        # 工程名
        project(myproject)
        
        # 基础日志打印
        message("===日志打印开始===")
        
        # 日志级别打印
        # 这是 WARNING 级别
        message(WARNING "WARNING")
        # 这是NOTICES级别 
        message(NOTICE "NOTICE")
        # 这是STATUS级别 
        message(STATUS "STATUS")
        # 这是VERBOSE级别 
        message(VERBOSE "VERBOSE")
        # 这是DEBUG级别 
        message(DEBUG "DEBUG")
        
        # 生成可执行程序
        add_executable(myproject ${PROJECT_SOURCE_DIR}/main.cpp)
        
        # 这个也是NOTICE级别
        message("add_executable after")
        
        message("===日志打印结束===")
      
  • 控制台打印结果

    • 在这里插入图片描述
  • 文件打印结果

    • 在这里插入图片描述
  • 默认会将 STATUS 开始的级别重定向到文件中,STATUS 之前的日志级别依旧在控制台打印。

  • 如果想将所有日志都打印到文件中,需要将错误输出也重定向到标准输出,如下

    • 在这里插入图片描述
    • 在这里插入图片描述
  • 可以看到,控制台没有打印任何信息,所有信息都打印到了文件中。

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

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

相关文章

MySQL面试重点-1

1. 数据库基础知识: DDL、DML、DQL、DCL的概念与区别? DDL(数据定义语言):创建(CREATE)数据库中的各种对象:表、视图、索引等DML(数据操纵语言)&#xff1a…

点积和叉积

文章目录 1、向量的点积2、向量的叉积3、矩阵的点积4、矩阵的叉积 1、向量的点积 数量积又称标量积(Scalar product)、点积(Dot product),在欧几里得空间(Euclidean space)中称为内积&#xff…

为何云原生是未来?企业IT架构的颠覆与重构(上)

🐇明明跟你说过:个人主页 🏅个人专栏:《未来已来:云原生之旅》🏅 🔖行路有良友,便是天堂🔖 目录 一、引言 1、什么是云原生 2、云原生的背景和起源 背景 起源 关…

酷开会员丨酷开系统K歌模式,父亲节的家庭欢聚时光

K歌以其独特的魅力,为家庭娱乐带来了无限乐趣。想象一下,父亲节这天,打开电视进入K歌频道,与家人一起嗨唱,客厅里充满了欢声笑语,酷开系统的K歌应用也就成为了连接亲情的桥梁,让爸爸们都能在这个…

CSS-0_1 CSS和层叠(样式优先级、内联样式、选择器 用户代理样式)

CSS 的本质就是声明规则 ——《深入解析CSS》 文章目录 CSS层叠和优先级用户代理样式请和用户代理样式和谐相处 选择器单选择器的优先级选择器组的优先级关于选择器的其他源码顺序尽可能的选择优先级低的选择器 内联样式内联样式和JavaScript !important多个 !important 碎碎念…

Wing FTP Server v7.2.0 解锁版安装教程 (跨平台的专业FTP服务器软件)

前言 Wing FTP Server是一款跨平台的专业FTP服务器软件, 支持可扩展处理器架构采用异步IO处理, 在速度和效率方面领先于其他同类产品. 它在高负载的情况下也能持续地正常运行, 非常适合企业文件传输. 通过基于Web管理端, 何时何地都能轻松管理远程的服务器. 除了基本功能外, 它…

qt笔记之qml和C++的交互系列(二):rootObject

qt笔记之qml和C的交互系列(二):rootObject code review! —— 2024-06-17 杭州 夜 文章目录 qt笔记之qml和C的交互系列(二):rootObject一.使用rootObject例程1.运行2.main.cpp3.main.qml3.用于Debug的加长版main.cpp 二.QML文件的根对象详解基本概念常…

蜂鸣器:基础(1)

蜂鸣器:基础(1) 原文: In this tutorial, we are going to learn how to use the buzzer with Arduino, In detail, we will learn: 在本教程中,我们将学习如何将蜂鸣器与Arduino一起使用,将学习&#xff…

C的I/O操作

目录 引言 一、文件与目录操作 1. 打开与关闭文件 2. 文件读写操作 3. 文件定位与错误处理 二、字符流与字节流 1. 字符流处理 2. 字节流处理 三、序列化与反序列化 1. 序列化 2. 反序列化 四、新的I/O(NIO) 表格总结 文件与目录操作 字符…

证明 均匀分布 的期望和方差

均匀分布 均匀分布(Uniform Distribution)是一种常见的连续型概率分布,其中随机变量在给定区间内的每个值都有相同的概率。假设随机变量 ( X ) 在区间 ([a, b]) 上服从均匀分布,记作 均匀分布的概率密度函数(PDF&am…

好用的库函数,qsort函数大详解(干货满满!)(进阶)

前言: 小编在上一篇文章说了这一篇将要写qsort函数的模拟实现,那么废话不多说,现在开始进入今天的代码之旅喽! 目录: 1.qsort函数的模拟实现的逻辑和思路 2.qsort函数模拟实现的代码实现 3.代码展示 1.qsort函数的模…

YOLOv9独家提点|加入MobileViT 、SK 、Double Attention Networks、CoTAttention等几十种注意力机制(五)

本文介绍了YOLOv9模型的改进,包括加入多种注意力机制,如SE、CBAM、ECA和SimAM。此外,还探讨了MobileViT轻量级视觉Transformer在移动设备上的应用,以及SelectiveKernelNetworks和A2-Nets的双注意力结构。最后,CoTAttention网络在视觉问答任务中的改进展示了跨模态注意力交…

今日早报 每日精选15条新闻简报 每天一分钟 知晓天下事 6月17日,星期一

每天一分钟,知晓天下事! 2024年6月17日 星期一 农历五月十二 1、 今年首个红色山洪灾害预警:17日,浙江西南部、福建北部局地发生山洪灾害可能性很大。 2、 国家医疗保障局重构产科服务价格项目,“分娩镇痛”亲情陪产…

AI大模型在运动项目的深度融合和在穿戴设备的实践及未来运动健康技术发展

文章目录 1. 技术架构2. 模型选择2.1 LSTM(长短期记忆网络)2.2 CNN(卷积神经网络)2.3 Transformer 3. 数据处理数据预处理 4. 实时性要求4.1 边缘计算4.2 模型优化 5. 数据隐私与安全6. 深入分析AI大模型在穿戴设备的应用和未来发…

Yum安装LAMP

查看当前80端口是否被占用 ss -tulanp | grep 80查询httpd是否在yum源中 yum info httpd安装httpd yum -y install httpd启动httpd服务,设置开机自启 systemctl enable httpd --now systemctl start httpd查看当前进程 ps aux | grep httpd查看当前IP&#xff…

Google谈出海:品牌「性价比」转向「心价比」

Google Marketing Live中国站活动现场 越来越多的中国全球化品牌基于对全球消费和海外地区的深刻洞察,不断提升产品研发和迭代能力,在海外消费者心中塑造「中国质造」和「中国智造」的新形象。2023年6月15日,凯度与Google合作发布《2023 凯…

AI数据分析:根据Excel表格数据进行时间序列分析

ChatGPT中输入提示词: 你是一个Python编程专家,要完成一个Python脚本编写的任务,具体步骤如下: 读取Excel表格:"F:\AI自媒体内容\AI行业数据分析\toolify月榜\toolify2023年-2024年月排行榜汇总数据.xlsx"…

vite-plugin-pwa 离线安装Vite应用

渐进式Web应用(PWA)通过结合 Web 和移动应用的特点,为用户带来更加流畅和快速的体验。且PWA支持离线访问能力(访问静态资源本地缓存),极大提高了用户交互的流畅性,降低非必要的网络依赖。尤其适…

基于 U-Net 的图像分割

点击下方卡片,关注“小白玩转Python”公众号 图像分割是一种将图像划分为不同区域或对象的过程。它通常在像素级别进行,通过将图像中具有相似特征的区域分组或定义对象的边界来完成。这是一种识别和解析图像中不同对象或特征的方法。 假设一位医学专业人…

气象数据NC、grb2解析成矢量json、CMIS、MICPS及图片应用到webgis

一、基础概念 气象数据通常以多种格式存储和交换,以适应不同的应用需求和处理工具。以下是一些常见的气象数据格式及其转换方法的概述: 常见气象数据格式 1. NetCDF(Network Common Data Form):一种自描述、自包含的…