【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指令. ...
随机推荐
- FFmpeg开发笔记(三十二)利用RTMP协议构建电脑与手机的直播Demo
不管是传统互联网还是移动互联网,实时数据传输都是刚需,比如以QQ.微信为代表的即时通信工具,能够实时传输文本和图片.其中一对一的图文通信叫做私聊,多对多的图文通信叫做群聊. 除了常见的图文即时通信,还 ...
- mysql在把子查询结果作为删除表中数据的条件,mysql不允许在子查询的同时删除原表数据
在上一文中发布了多表删除指定记录,发现达不到我想要的效果,找了很多资料,发现以下方法. 数据库不能边查询边删除, 尝试以下操作 delete from push_msg_overview where ...
- DotNetGuide专栏C#/.NET/.NET Core充电站(让你学习不迷路)
DotNetGuide简介 记录.收集和总结C#/.NET/.NET Core基础知识.学习路线.开发实战.编程技巧练习.学习视频.文章.书籍.项目框架.社区组织.开发必备工具.常见面试题.面试须知. ...
- java --面试题大全
J2EE面试题 文档版本号:V2.0 2016年11月 目 录 1. Java基础部分 8 1.1. 一个".java"源文 ...
- java中的基准测试框架JMH
JHM是openJDK开发的一个benchmark框架.它是一个Maven依赖,所以创建一个Maven项目,引入下面两个依赖: <dependency> <groupId>or ...
- python3 pip3 安装 xmlrpc 失败
python2 使用的是xmlrpclib库,到了 python3, 就直接使用 xmlrpc.client 和 xmlrpc.server了. 接下来,我使用 pip3 install xmlrpc ...
- OpenWrt中的LuCi和Lua一些总结
Lua.LuCi Lua是一种小巧的脚本语言,和Python一样,Lua脚本的运行需要Lua解释器: UCI(Unified Configuration Interface)是OpenWrt实现所有系 ...
- Web 安全:OWASP TOP10 漏洞介绍
OWASP TOP 10漏洞是指由Open Web Application Security Project(OWASP)发布的十大最严重. 最普遍的Web应用程序安全漏洞.这些漏洞在当今的Web应用 ...
- 敏捷开发(Scrum)
一.敏捷的背景与动机 1.1 软件危机及软件工程的出现 速度是企业竞争致胜的关键因素,软件项目的最大挑战在于,一方面要应付变动中的需求,一方面要在紧缩的时程内完成项目,传统的软件工程难以满足这些要 ...
- 从基础到高级应用,详解用Python实现容器化和微服务架构
本文分享自华为云社区<Python微服务与容器化实践详解[从基础到高级应用]>,作者: 柠檬味拥抱. Python中的容器化和微服务架构实践 在现代软件开发中,容器化和微服务架构已经成为主 ...