【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指令. ...
随机推荐
- .Net Framework使用Autofac实现依赖注入
.Net Framework使用Autofac实现依赖注入 前言 最近也是找了快2周的工作了,收到的面试邀请也就几个,然后有个面试题目是用asp.net mvc + Entityframework 做 ...
- 下载 Linux 内核的脚本
介绍 在 类UNIX 环境下运行比较好(基于wget) 包括了 2.6 ~ 4.x 内核的地址. 5.x 因为 还在更新因此不做记录. 脚本下载地址: https://files.cnblogs.co ...
- 超快的 Python 包管理工具「GitHub 热点速览」
天下武功,无坚不破,唯快不破! 要想赢得程序员的欢心,工具的速度至关重要.仅需这一优势,即可使其在众多竞争对手中脱颖而出,迅速赢得开发者的偏爱.以这款号称下一代极速 Python 包管理工具--uv ...
- 一次Java服务内存过高的分析过程
现象 年前,收到了短信报警,显示A服务的某台机器内存过高,超过80% 如上图所示,内存会阶段性增加.奇怪的是,十多台机器中只有这一台有这个问题 堆内内存分析 最先怀疑是内存泄漏的问题,所以首先使用jm ...
- Java进阶:HashMap底层原理(通俗易懂篇)
1.底层结构 Java 7及之前版本 在Java 7及之前的版本中,HashMap的底层数据结构主要是数组加链表.具体实现如下: 数组:HashMap的核心是一个Entry数组(Entry<K, ...
- RK3588开发笔记(四):基于定制的RK3588一体主板升级镜像
前言 方案商定制的主板,加入了360°环视算法功能,涉及到了一些库的添加,重新制作了依赖库的镜像,镜像更新的原来的板子上. 定制的板子 升级接口type-c 设计接口是type-c, ...
- LabVIEW的自定义按钮
下载几张图片: 比较好的 网站1:https://www.iconfont.cn/ 网站2:https://yesicon.app/ 选用windows风格按钮控件进行自定义, 自定义的图片分别放入这 ...
- 解锁网络无限可能:揭秘微软工程师力作——付费代理IP池深度改造与实战部署指南
基于付费代理的代理IP池 项目来源 此项目为微软某个工程师构建的代理IP池,我对此进行了改造.可以用于生产环境中的爬虫项目 阅读前建议 阅读我之前发布的爬虫基础的文章,了解代理如何获取.使用等. 分为 ...
- 在windows双系统中,nginx配置虚拟域名
比如在ubuntu系统中,nginx配置了域名www.abc.com, 那么需要在终端 sudo vim /etc/hosts文件中配置域名,如下: 127.0.0.1 www.abc.com 即可访 ...
- [oeasy]python0054_三引号_原样显示字符串_triple_quoted
三引号 回忆上次内容 \ 首先是转义字符 可以 和别的字符 构成转义序列 \a是 ␇ (bell), \b 退回一格 \t 水平制表符 \v.\f LineFeed \\ 输出 \ \" 输 ...