cmake的常用语法

news2025/2/28 10:21:49

cmake 的注释

# 注释
#[[大段注释
第二行注释
第三行注释]]

cmake的log -message

cmake message

message(arg1 arg2 arg3 arg4)  # 会自动连起

message 多级别输出

message(FATAL_ERROR,"abc") # 最严重的错误,直接停止执行
message(SEND_ERROR,"aba") # cmake 继续运行,生成跳过
message(WARNING,"abc")
message(NOTICE,"abc")==message("abc") # 想用就用
message(STATUS,"abc") # 用户可能感兴趣的信息
message(VERBOSE,"abc")# 用户想知道的详细信息,默认不显示
message(DEBUG,"abc") # 项目本身开发人员使用信息,默认不显示
message(TRACE,"abc") # 项目开发人员非常低级别的细粒度信息,默认不显示

设置日志显示级别

cmake -S . -B build --log-level=VERBOSE

重定向

cmake -S . -B build --log-level=VERBOSE>log.txt

message中常用的check_xxx

CHECK_START 对应。CHECK_PASS或一个CHECK_FAIL

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Us3Ye3LP-1672999555637)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/cb3ba7d9-1f30-4fca-8cef-5d2b5f70c040/Untitled.png)]

message("=======================2.4=============================")
#开始查找
message(CHECK_START "查找xcpp")
#查找库xcpp的代码
# message消息缩进
set(CMAKE_MESSAGE_INDENT "--")

#嵌套查找
message(CHECK_START "查找xlog")
#查找xlog代码
message(CHECK_PASS "成功")

message(CHECK_START "查找xthreadpool")
message(CHECK_FAIL "失败")

#结束查找 查找失败
message(CHECK_FAIL "失败")

message输出成不同的颜色

# 105message_color/CMakeLists.txt
cmake_minimum_required(VERSION 3.20)
project(message_color)
#[[
\033[1;31;40m    <!--1-高亮显示 31-前景色红色  40-背景色黑色-->
\033[0m          <!--采用终端默认设置,即取消颜色设置-->
显示方式  
0                终端默认设置
1                高亮显示
4                使用下划线
5                闪烁
7                反白显示
8                不可见

前景色            背景色           颜色
---------------------------------------
30                40              黑色
31                41              红色
32                42              绿色
33                43              黃色
34                44              蓝色
35                45              紫红色
36                46              青蓝色
37                47              白色
]]

string(ASCII 27 Esc)

# Esc[0;31m
set(R "${Esc}[0;31m")   #红色
#Esc[0m 
set(E "${Esc}[m" )      #结束颜色设置
set(B "${Esc}[1;34m")   #蓝色高亮
set(RB "${Esc}[1;31;40m") #红色字体黑色背··景
message("${R}红色内容${E} 默认颜色")·
message("${B}蓝色内容${E} 默认颜色")
message("${RB}红色字体黑色背景${E} 默认颜色")

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HcqgOb1C-1672999555638)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/765db919-0ee0-4a13-a4a5-67c32d5d646f/Untitled.png)]

cmake 变量 set

设置变量

set(变量名,值)

使用变量

${变量} 可以直接用到字符串里

cmake 自带变量

add_library() 如果不进行设置的话

通过BUILD_SHARED_LIBS可以设置共享还是静态

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pqHZB26d-1672999555638)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/133d0206-ab13-417f-b63f-ee52800d5d9d/Untitled.png)]

${PROJECT_NAME}项目名称

cmake include

类似于c++ include 就是把代码直接复制过来相当于

比如有多个cmakelist,可以通过include把多个cmakelist引入到一个总的里面

#107cmake_include/CMakeLists.txt
cmake_minimum_required(VERSION 3.20)
project("cmake_include")
message("begin include")

include("cmake/test_cmake.cmake")
include("cmake/test_cmake.cmake")
include("cmake/test_cmake1.cmake" OPTIONAL) #OPTIONAL 可选,文件不存在不报错
include("cmake/test_cmake1.cmake" OPTIONAL  RESULT_VARIABLE ret) # RESULT_VARIABLE 返回值,是否引用成功
message("RESULT_VARIABLE ret= ${ret}") #NOTFOUND
include("cmake/test_cmake.cmake" OPTIONAL  RESULT_VARIABLE ret)
message("RESULT_VARIABLE ret= ${ret}") #导入文件的绝对路径

message("end include")

cmake 自动寻找所有源码文件和头文件

增加头文件和源文件后,不需要修改cmake

源码文件

会自动寻找.c .cpp 但不会寻找头文件

aux_source_directory("./src" src_main)
${src_main} 包含./src下所有的cpp c cc

头文件

file(glob h_file ./include/*.h)
${h_file} 包含./include 下所有的.h 头文件

整体

#108auto_src_h/CMakeLists.h
#[[
108auto_src_h
    CMakeLists.txt
    main.cpp
    src
        xlog.cpp
        xthread.cc
        xtest.c
    include
        xlog.h
        xthread.hpp
]]

cmake_minimum_required(VERSION 3.20)
project("auto_src_h")

#头文件加载路径
set(INCLUDE_PATH  "./include")
include_directories(${INCLUDE_PATH})

# 找到当前目录(.)下源码写入M_SRC变量中
aux_source_directory("." M_SRC)
aux_source_directory("./src" SRC)

#读取所有的头文件
file(GLOB H_FILE "${INCLUDE_PATH}/*.h*")

add_executable(${PROJECT_NAME} ${M_SRC} ${SRC} ${H_FILE})

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

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

相关文章

NOP+终于来了,看看蔚来随NOP+释放的数据和思考

1. 行驶数据 ADAS功能累计用户行驶里程4.9亿公里&#xff1b;NT1的NOP功能累计行驶2.3亿公里&#xff1b;NT2的Pilot功能累计行驶了1700万公里。2. 统一辅助驾驶软件架构原来NOP将直路行驶和匝道作为两个场景开发&#xff0c;场景分割思路了城区和低速就变得无穷无尽。新NOP是以…

K_A11_001 基于STM32等单片机驱动DHT11 串口与OLED0.96双显示

K_A11_001 基于STM32等单片机驱动DHT11 串口与OLED0.96双显示一、资源说明二、基本参数1.参数2.引脚说明三、驱动说明时序对应程序:四、部分代码说明1、接线说明1.1、STC89C52RCDHT11模块1.2、STM32F103C8T6DHT11模块五、基础知识学习与相关资料下载六、视频效果展示与程序资料…

锁的分类,以及锁升级原理

1. 前言 锁在并发编程中非常重要&#xff0c;但是锁的种类有点多。这边文章的目的就是为了梳理锁的分类以及 锁升级的原理。 2. 锁的分类 种类\名称synchronizedReentrantLockReentrantReadWriteLock可重入锁√√√不可重入锁乐观锁①①①悲观锁√√√公平锁√√非公平锁√√√…

javaweb-Servlet基本使用

1&#xff0c; Servlet 1.1 简介 Servlet是JavaWeb最为核心的内容&#xff0c;它是Java提供的一门动态web资源开发技术。 使用Servlet就可以实现&#xff0c;根据不同的登录用户在页面上动态显示不同内容。 Servlet是JavaEE规范之一&#xff0c;其实就是一个接口&#xff0c…

关于分组函数(聚合函数)

分组函数&#xff1a;也叫"多行处理函数"或"聚合函数" &#xff08;特点&#xff1a;输入多行&#xff0c;最终输出一行&#xff09; 用于对表中指定字段下的内容进行统计的函数。 - count() 计数&#xff08;返回指定字段下内容不为null的数…

一文看懂Linux内存管理:虚拟内存、用户空间、内核空间、用户态、内核态、IPC通信原理

目录 一、虚拟内存地址 1.为什么要有虚拟内存地址&#xff1f; 2.虚拟地址好处 二、用户空间和内核空间 1.概念 2.用户态和内核态 3.IPC通信原理 一、虚拟内存地址 1.为什么要有虚拟内存地址&#xff1f; 因为如果CPU直接访问物理内存&#xff0c;那如果两个进程写入一…

MSF客户端渗透

利用Acrobat Reader漏洞执行payload ● 构造PDF文件 exploit/windows/fileformat/adobe_utilprintf仅支持8.1.2软件版本和XP系统&#xff1b; ● 构造恶意网站 exploit/windows/browser/adobe_utilprintf#同理&#xff0c;浏览器上运行pDF● 之后可以通过Meterpreter进行下一…

克罗格 Kroger EDI需求分析及注意事项

项目背景 Kroger&#xff08;美国克罗格公司&#xff09;是具有百年历史的名店之一。它虽然历史悠久&#xff0c;但并没有被变化的世界所淘汰&#xff0c;相反&#xff0c;它围绕着市场消费需求的变化&#xff0c;不断地进行创新&#xff0c;创造了世界零售百年史上的若干个第…

Linux物理内存管理:page、zone、node

基本概念页&#xff1a;struct page &#xff0c;如下图所示&#xff0c;x86架构下一般为4K为大小分区&#xff1a;struct zone &#xff0c;如下图所示&#xff0c;x86架构下分为三个区 ZONE_DMA,ZONE_NORMAL,ZONE_HIGHMEM内存节点&#xff1a;struct node。对于一个简单的嵌入…

杭州社保解读截止2023

杭州社保新政规定的社保内容以及缴费比例是怎样的? 1、养老保险&#xff1a;单位&#xff0c;14%;个人&#xff0c;8%。 2、医疗保险&#xff1a;单位&#xff0c;9.9%;个人&#xff0c;2% 。 3、失业保险&#xff1a;单位&#xff0c;0.5%;个人&#xff0c;0.5%。 4、工伤…

PC浏览器无法浏览网页的解决教程

前言 在浏览Potplayer官网和Github官网时&#xff0c;无论是火狐浏览器还是Edge浏览器&#xff0c;都无法正常链接到网站。以下教程不纠结具体原理&#xff0c;只介绍具体步骤&#xff0c;以便以后自查。而且以下教程以Github官网为例。 具体步骤 打开Chinese Firewall Test…

excel统计函数:应用广泛的动态统计之王OFFSET 上篇

【前言】OFFSET函数是判断Excel函数使用者是否进阶的一个重要函数之一。在实际工作中&#xff0c;如果你需要对工作中的数据文件进行系统化、自动化的建模&#xff0c;那么势必会使用这个函数。【功能及语法】OFFSET函数的功能是&#xff0c;以指定的引用为参照系&#xff0c;通…

你一定要知道这6个,高质量图片素材库

其实图片素材网站已经分享过很多次了&#xff0c;除了大家非常熟悉的 Pixabay、Pexels之外&#xff0c;其实还有很多优质的图片素材网。今天再给大家推荐几个&#xff0c;对你有帮助记得点赞、收藏哦&#xff01; 1、潮点视频 https://shipin520.com/shipin-tp/0-1329-0-0-0-…

轻松掌握Jenkins

Jenkins一、docker安装Jenkins1.linux2.web二、流水线1.gitlab连接jenkins1.jenkins服务器创建密钥2.将密钥添加到gitlab上3.创建gitlab访问令牌4.安装jenkins插件5.配置 GitLab 凭据2.创建流水线1.新增凭证配置 Username with password2.创建任务3.构建触发器4.构建5.配置gitl…

MySQL的卸载下载安装,都一条龙服务了,你还不快来???

目录 MySQL的卸载 第一步、停止 MySQL 服务 第二步、卸载有关 MySQL 的程序 第三步、删除相关 MySQL 相关文件 第四步、删除 MySQL 残留文件 MySQL的下载 MySQL的安装 由于我的 MySQL 之前安装的版本太低&#xff0c;导致在 DataGrip 里面用不了 check 约束&#xff0c;…

Android设计模式详解之桥接模式

前言 桥接模式也称为桥梁模式&#xff0c;是结构型设计模式之一&#xff1b; 定义&#xff1a;将抽象部分与实现部分分离&#xff0c;使它们都可以独立地进行变化&#xff1b; 使用场景&#xff1a; 如果一个系统需要在构建的抽象化角色和具体化角色之间增加更多的灵活性&a…

laravel5.5.50之权限(laravel-permissions)的使用

目录 一、安装laravel-permissions扩展 二、生成数据库迁移文件 三、执行数据迁移 四、php artisan migrate 生成的表 五、生成配置信息 六、在user模型下加载角色相关信息 七、测试角色、权限 一、安装laravel-permissions扩展 #不指定安装版本的命令 composer requir…

提升舆情监测软件技术方法解读,舆情监测技术逻辑?

舆情监测是指通过技术手段&#xff0c;对网络舆情进行监测、分析、挖掘和可视化展示的工作。舆情监测可以帮助企业、政府、组织等了解社会舆论&#xff0c;掌握社会动态&#xff0c;协助决策&#xff0c;提升社会影响力。TOOM舆情监测系统介绍提升舆情监测软件技术方法解读&…

Zabbix与乐维监控对比分析(七)——网络功能篇

前面我们详细介绍了Zabbix与乐维监控在架构与性能、Agent管理、自动发现、权限管理、对象管理、告警管理、可视化及图形图表方面的对比分析&#xff0c;接下来我们将对二者网络功能方面进行对比分析。 本篇是Zabbix与乐维监控对比专题系列文章的第七篇——网络功能篇&#xff…

gitlab+jenkins+docker持续集成环境搭建实战

介绍 什么是持续集成&#xff1f; 持续集成&#xff08;CI&#xff09;是在源代码变更后自动检测、拉取、构建和&#xff08;在大多数情况下&#xff09;进行单元测试的过程。持续集成是启动管道的环节&#xff08;尽管某些预验证 —— 通常称为 上线前检查(pre-flight checks)…