【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指令. ...
随机推荐
- Springboot3.0+spring6.0+JDK17+配置jsp和打war包
由于某些缘故,公司的产品需要升级,但并不希望花费大量时间重写前端代码(原来的就不是前后分离的).所以虽然spring和springboot都升级为最新的版本,但是依然还是需要支持jsp,并继续用打包为 ...
- HDOJ 6703 Array
HDOJ 6703 Array 题目 题目链接 array *Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 262144/262144 K ...
- PaddleNLP UIE -- 药品说明书信息抽取(名称、规格、用法、用量)
目录 创建项目 环境配置 上传代码 训练定制 代码结构 数据标注 准备语料库 数据标注 导出数据 数据转换 doccano Label Studio 模型微调 模型评估 定制模型--预测 效果 Pad ...
- 函数式编程(Lambda、Stream流、Optional等)
# 声明 文档来源:Github@shuhongfan 源文档:B站UP主:三更草堂 # 函数式编程-Stream流 # 概述 # 为什么学? 基操,否则看不懂别人写的优雅代码 简化代码,不想看到有些 ...
- JS --函数进阶 --手稿
- js-内置函数-手稿
- python爬取网站图片保存到本地文件夹
爬取的网站 https://wallpaperscraft.com/catalog/anime 爬取代码 # 导包 import os import requests import parsel fr ...
- Swift开发基础05-可选项
可选项定义 可选项,一般也叫可选类型,它允许将值设置为nil 在类型名称后面加个问号? 来定义一个可选项 var name: String? = "Jack" name = nil ...
- 痞子衡嵌入式:瑞萨RA8系列高性能MCU开发初体验
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是瑞萨RA8系列高性能MCU开发上手体验. 我们知道瑞萨半导体的通用 MCU 产品线主要包含基于自有内核 8/16bit RL78 系列以 ...
- 题解:P10320 勇气(Courage)
P10320 勇气(Courage) 推导过程 本题是一道数学题,重点是如何推导出正确式子. 首先,先特判几个特殊点: 当 \(n>=2\) 且 \(x=2\) 时,是不存在解的,战斗力无论何时 ...