【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指令. ...
随机推荐
- Windows查看电源使用情况
这里使用Windows自带的东西查看电源使用情况. 1.按Win键+R,输入cmd,回车. 2.输入Powercfg /batteryreport回车. 3.根据提示找到电池报告文件,双击打开即可.
- .net core 3.1 + 动态执行C#
1.使用 using Microsoft.CodeAnalysis.CSharp.Scripting;using Microsoft.CodeAnalysis.Scripting; 2.定义 Rosl ...
- 工控必备!NXP i.MX 8M Mini开发板规格书资料分享,高性能低功耗!
1 核心板简介 创龙科技SOM-TLIMX8-B是一款基于NXP i.MX 8M Mini的四核ARM Cortex-A53 + 单核ARM Cortex-M4异构多核处理器设计的高端工业级核心板,A ...
- OpenStack 下 CentOS6.X 镜像网络初始化失败问题排查
问题表现 在我的 OpenStack 集群上迁移了一批老旧的镜像(从其他三方云平台过来的)发现这批镜像在使用 ConfigDrive 的方式注入配置初始化时无法对非首张网卡镜像初始化(后经过测试非 C ...
- Linux使用Tomcat常用命令
切换到tomcat主目录下 cd usr/local/tomcat # 1.启动tomcat服务 # 方式一:直接启动 bin/startup.sh # 方式二:作为服务启动(推荐) nohup bi ...
- Vue 3 后端错误消息处理范例
1. 错误消息格式 前后端消息传递时,我们可以通过 json 的 errors 字段传递错误信息,一个比较好的格式范例为: { errors: { global: ["网络错误"] ...
- 【游记】CSP 2023
day 0 和 printfmingren 整理了一下不会的知识点,发现有点多,遂开摆 音游真的太好玩了 对着<算法竞赛进阶指南>复习了下对拍器的写法,把部分算法的模板又打了一遍 感觉前途 ...
- SQL:聚集索引和非聚集索引
聚集(clustered)索引,也叫聚簇索引 定义:数据行的物理顺序与列值(一般是主键的那一列)的逻辑顺序相同,一个表中只能拥有一个聚集索引. 注:第一列的地址表示该行数据在磁盘中的物理地址,后面三列 ...
- LeetCode513. 找树左下角的值
题目链接:https://leetcode.cn/problems/find-bottom-left-tree-value/description/ 题目叙述: 给定一个二叉树的 根节点 root,请 ...
- RHCA rh442 010 文件系统结构 BDP调优 网卡驱动带宽
文件系统结构 用户通过虚拟文件系统,访问底层的文件系统 对于一块磁盘而言,MBR + 分区表记录硬盘的信息 对于一个分区而言,这个分区的第一个块,superblock,超级块,记录分区元数据信息 对于 ...