【CMake系列】03-cmake 注释、常用指令 message、set、file、for_each、流程控制if
本文给出了 cmake 中的 一些常用的 指令,可以快速了解,为后面的内容深入 打点基础。
本专栏的详细实践代码全部放在 github 上,欢迎 star !!!
如有问题,欢迎留言、或加群【392784757】交流
注释
# 行注释
#[[
多行注释
]]
message(" " #[[这里也可以注释]] "")
message
在学习时 可以多用message() 来输出 想要查看的变量
message([<mode>] "message text" ...)
一般使用
message("msg1" "msg2" "msg3")
进阶使用-指定日志级别
message([] "message ... ")
--log-level
标准输出 stdout
错误输出 stderr
日志级别
- FATAL_ERROR 停止cmake运行和生成 printed to stderr
- SEND_ERROR cmake继续运行,生成跳过 printed to stderr
- WARNING printed to stderr
- none printed to stderr
- STATUS 项目用户可能感兴趣的信息 stdout
- VERBOSE 针对项目用户的详细信息 stdout
- DEBUG 项目本身的开发人员使用的信息
- TRACE 非常低级实现细节的细粒度消息
set
set 主要是涉及变量的创建、和修改
cmake 变量,包括两个部分,内置变量、自定义变量
内置变量 可进一步细分
- 信息变量 project_name
- 行为变量 BUILD_SHARED_LIBS
- 描述系统的变量 MSVC、WIN32、CMAKE_SYSTEM_NAME
- 控制构建的变量
- ...
自定义变量,常为了更好控制 CMakeLists.txt 结构 ,逻辑流程,来定义一些变量,更好地辅助我们编写
如,
set(package_dir "") # 安装后的位置
set(package_root "") # 源码的位置
unset() 取消定义的变量
file
cmake fille 命令页面 :https://cmake.org/cmake/help/latest/command/file.html#file

常用的file 可分为是三个方面【其他的还有 Locking、 Path Conversion、Transfer、 archiving】
- reading
- writing
- filesystem
下面给出了一些常用的 file 指令
- 创建与删除 文件/文件夹
file(MAKE_DIRECTORY files)
file(TOUCH files/4.txt)
file(TOUCH files/5.txt)
file(REMOVE 1.txt)
file(REMOVE_RECURSE files/4.txt)
- 创建写入\追加 文件
file(WRITE main.cpp [=[
#include<iostream>
using namespace std;
int main()
{
cout<<"hello file create"<<endl;
return 0;
}
]=])
file(WRITE output.txt "hello cmake,1,你好 cmake\n")
file(APPEND output.txt "this is additional content.")
- file 检索文件保存到 list ,然后进行遍历
file(GLOB_RECURSE all_files *.txt)
math(EXPR cnt "0")
foreach(file ${all_files})
message("file_${cnt}: ${file}")
math(EXPR cnt "${cnt}+1")
endforeach(file ${all_files})
- file 拷贝文件、安装文件等
file(COPY_FILE 2.txt 2_copy.txt)
file(COPY 2.txt DESTINATION files/2.txt)
file(INSTALL 2.txt DESTINATION ${CMAKE_PREFIX_PATH}/)
github上给出了更多详细的实践教程
foreach
cmake 中的 for 循环,相关指令签名如下
foreach(<loop_var> <items>)
<commands>
endforeach()
#
foreach(<loop_var> RANGE <stop>)
foreach(<loop_var> RANGE <start> <stop> [<step>])
foreach(<loop_var> IN [LISTS [<lists>]] [ITEMS [<items>]])
主要是用来遍历 list ,
下面的CMakeLists.txt 给出了相关例子
cmake_minimum_required(VERSION 3.5 FATAL_ERROR)
project(foreach_argument LANGUAGES CXX)
list(APPEND files a.cpp b.cpp)
math(EXPR cnt "0")
foreach(file ${files})
# message(STATUS "file_${cnt} ${file}")
math(EXPR cnt "${cnt}+1")
endforeach()
foreach(i RANGE 10)
# message(STATUS "${i}")
endforeach(i RANGE 10)
foreach(i RANGE 0 10 2)
message(STATUS "${i}")
endforeach(i RANGE 10)
if
if()
elseif()
else()
endif()
【CMake系列】03-cmake 注释、常用指令 message、set、file、for_each、流程控制if的更多相关文章
- CMake学习笔记三:cmake 常用指令
1 基本指令 1,ADD_DEFINITIONS 向 C/C++编译器添加-D 定义,比如: DD_DEFINITIONS(-DENABLE_DEBUG -DABC),参数之间用空格分割. 如果你的代 ...
- 《CMake实践》笔记一:PROJECT/MESSAGE/ADD_EXECUTABLE
<CMake实践>笔记一:PROJECT/MESSAGE/ADD_EXECUTABLE <CMake实践>笔记二:INSTALL/CMAKE_INSTALL_PREFIX &l ...
- 《CMake实践》笔记一:PROJECT/MESSAGE/ADD_EXECUTABLE【转】
本文转载自:http://www.cnblogs.com/52php/p/5681745.html 前言: 开发了5,6年的时间,如果没有KDE4,也许不会有人或者Linux发行版本重视cmake,因 ...
- mysqlQL 5.7 安装报错CMake Error at cmake/boost.cmake:81 (MESSAGE)
CMake Error at cmake/boost.cmake:81 (MESSAGE): You can download it with -DDOWNLOAD_BOOST=1 -DWITH_BO ...
- CMake Error at cmake/boost.cmake:76 (MESSAGE):
编译mysql5.7.9的时候报错 CMake Error at cmake/boost.cmake:76 (MESSAGE): You can download it with -DDOWNLOAD ...
- Vue系列(一):简介、起步、常用指令、事件和属性、模板、过滤器
一. Vue.js简介 1. Vue.js是什么 Vue.js也称为Vue,读音/vju:/,类似view,错误读音v-u-e 是一个轻量级MVVM(Model-View-ViewModel)框架,和 ...
- 编译mysql时CMake Error at cmake/readline.cmake:85 (MESSAGE)
CMake Error at cmake/readline.cmake:85 (MESSAGE): Curses library not found. Please install appropr ...
- JVM系列【5】JVM常用指令
JVM系列笔记目录 虚拟机的基础概念 class文件结构 class文件加载过程 jvm内存模型 JVM常用指令 GC与调优 指令集分类 基于寄存器的指令集 基于栈的指令集 Hotspot中的Loca ...
- Nginx学习系列四默认负载均衡轮询及Ip_hash等常用指令介绍
一.简介 Upstream模块是Nginx中一个核心模块,当客户端访问Nginx服务器的时候,Nginx会从服务器列表中选取压力小的服务器,然后分配给客户端进行访问.这个过程,Nginx通过轮询算法轮 ...
- ROS零门槛学渣教程系列(二)——Linux常用指令:mkdir、tar、 unzip、cp、scp、mv、rm、find、apt、ssh
Linux常用指令通过上一教程,我们获得了ubuntu系统.Linux是一个很大的领域.但不要紧张,我们一步步来就是了,跟着教程,需要能用到新知识,会提前介绍给大家.下面学习几个常用的Linux指令. ...
随机推荐
- Xilinux PS与PL交互::Linux-App读写REG
Xilinux PS与PL交互::Linux-App读写REG 背景 PL配置好有关的硬件,PS端做验证. 设计方案:针对REG地址,不使用设备树配置. 遇到的问题:暂无. 验证目的 验证PL-PS的 ...
- python 无监督生成模型
无监督生成模型在机器学习中扮演着重要角色,特别是当我们在没有标签数据的情况下想要生成新的样本或理解数据的内在结构时.一种流行的无监督生成模型是生成对抗网络(Generative Adversarial ...
- 【论文阅读】BEVFormer: Learning Bird's-Eye-View Representation from Multi-Camera Images via Spatiotemporal
论文题目:BEVFormer: Learning Bird's-Eye-View Representation from Multi-Camera Images via Spatiotemporal ...
- “进口”双核A53@1.4GHz仅188元起,超高性价比!“邮票孔”AM62x工业核心板,正式发布!
创龙科技作为TI官方合作伙伴,在2022年9月即推出搭载TI最新明星处理器AM62x的工业核心板-SOM-TL62x(B2B版本).为了让工业客户进一步降低产品成本,并提高产品连接的可靠性,我们再次推 ...
- 单片机升级,推荐此79元双核A7@1.2GHz国产平台的8个理由
含税79元即可运行Linux操作系统 对于嵌入式软件开发者而言,单片机令人最痛苦的莫过于文件操作.79元T113-i工业核心板(基于全志国产处理器,国产化率100%)可运行Linux操作系统,可使用L ...
- FPGA案例开发手册——基于全志T3+Logos FPGA核心板
前 言 本文档主要提供评估板FPGA端案例测试方法,适用的开发环境为Windows 7 64bit和Windows 10 64bit. 本文案例基于创龙科技的全志T3+Logos FPGA核心板,它是 ...
- 可重入锁思想,设计MQ迁移方案
如果你的MQ消息要从Kafka切换到RocketMQ且不停机,怎么做?在让这个MQ消息调用第三方发奖接口,但无幂等字段又怎么处理?今天小傅哥就给大家分享一个关于MQ消息在这样的场景中的处理手段. 这是 ...
- Java中的泛型(类、接口、方法)
一.泛型概述 1. 什么是泛型? 泛型,即"参数化类型".一提到参数,最熟悉的就是定义方法时有形参列表,普通方法的形参列表中,每个形参的数据类型是确定的,而变量是一个参数.在调用普 ...
- Centos7离线安装gcc4.8
有时候CentOS工作在无互联网的环境下,需要在离线环境下安装一些组件,这次实现的是模拟在离线环境下安装gcc4.8. 第一步: 先去http://mirrors.aliyun.com/centos/ ...
- SeaweedFS + TiKV 部署保姆级教程
在使用 JuiceFS 时,我们选择了 SeaweedFS 作为对象存储,以及 TiKV 作为元数据存储,目前在 SeaweedFS 上已经存储了近1.5PB 的数据.关于 SeaweedFS 和 T ...