本文给出了 cmake 中的 一些常用的 指令,可以快速了解,为后面的内容深入 打点基础。

本专栏的详细实践代码全部放在 github 上,欢迎 star !!!

如有问题,欢迎留言、或加群【392784757】交流

注释

# 行注释

#[[
多行注释
]] message(" " #[[这里也可以注释]] "")

message

在学习时 可以多用message() 来输出 想要查看的变量

message([<mode>] "message text" ...)

一般使用

message("msg1" "msg2" "msg3")

进阶使用-指定日志级别

message([] "message ... ")

--log-level

标准输出 stdout

错误输出 stderr

日志级别

  1. FATAL_ERROR 停止cmake运行和生成 printed to stderr
  2. SEND_ERROR cmake继续运行,生成跳过 printed to stderr
  3. WARNING printed to stderr
  4. none printed to stderr
  5. STATUS 项目用户可能感兴趣的信息 stdout
  6. VERBOSE 针对项目用户的详细信息 stdout
  7. DEBUG 项目本身的开发人员使用的信息
  8. 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 指令

  1. 创建与删除 文件/文件夹
file(MAKE_DIRECTORY files)
file(TOUCH files/4.txt)
file(TOUCH files/5.txt) file(REMOVE 1.txt)
file(REMOVE_RECURSE files/4.txt)
  1. 创建写入\追加 文件
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.")
  1. 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})
  1. 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的更多相关文章

  1. CMake学习笔记三:cmake 常用指令

    1 基本指令 1,ADD_DEFINITIONS 向 C/C++编译器添加-D 定义,比如: DD_DEFINITIONS(-DENABLE_DEBUG -DABC),参数之间用空格分割. 如果你的代 ...

  2. 《CMake实践》笔记一:PROJECT/MESSAGE/ADD_EXECUTABLE

    <CMake实践>笔记一:PROJECT/MESSAGE/ADD_EXECUTABLE <CMake实践>笔记二:INSTALL/CMAKE_INSTALL_PREFIX &l ...

  3. 《CMake实践》笔记一:PROJECT/MESSAGE/ADD_EXECUTABLE【转】

    本文转载自:http://www.cnblogs.com/52php/p/5681745.html 前言: 开发了5,6年的时间,如果没有KDE4,也许不会有人或者Linux发行版本重视cmake,因 ...

  4. 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 ...

  5. 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 ...

  6. Vue系列(一):简介、起步、常用指令、事件和属性、模板、过滤器

    一. Vue.js简介 1. Vue.js是什么 Vue.js也称为Vue,读音/vju:/,类似view,错误读音v-u-e 是一个轻量级MVVM(Model-View-ViewModel)框架,和 ...

  7. 编译mysql时CMake Error at cmake/readline.cmake:85 (MESSAGE)

    CMake Error at cmake/readline.cmake:85 (MESSAGE):  Curses library not found.  Please install appropr ...

  8. JVM系列【5】JVM常用指令

    JVM系列笔记目录 虚拟机的基础概念 class文件结构 class文件加载过程 jvm内存模型 JVM常用指令 GC与调优 指令集分类 基于寄存器的指令集 基于栈的指令集 Hotspot中的Loca ...

  9. Nginx学习系列四默认负载均衡轮询及Ip_hash等常用指令介绍

    一.简介 Upstream模块是Nginx中一个核心模块,当客户端访问Nginx服务器的时候,Nginx会从服务器列表中选取压力小的服务器,然后分配给客户端进行访问.这个过程,Nginx通过轮询算法轮 ...

  10. ROS零门槛学渣教程系列(二)——Linux常用指令:mkdir、tar、 unzip、cp、scp、mv、rm、find、apt、ssh

    Linux常用指令通过上一教程,我们获得了ubuntu系统.Linux是一个很大的领域.但不要紧张,我们一步步来就是了,跟着教程,需要能用到新知识,会提前介绍给大家.下面学习几个常用的Linux指令. ...

随机推荐

  1. Windows查看电源使用情况

    这里使用Windows自带的东西查看电源使用情况. 1.按Win键+R,输入cmd,回车. 2.输入Powercfg /batteryreport回车. 3.根据提示找到电池报告文件,双击打开即可.

  2. .net core 3.1 + 动态执行C#

    1.使用 using Microsoft.CodeAnalysis.CSharp.Scripting;using Microsoft.CodeAnalysis.Scripting; 2.定义 Rosl ...

  3. 工控必备!NXP i.MX 8M Mini开发板规格书资料分享,高性能低功耗!

    1 核心板简介 创龙科技SOM-TLIMX8-B是一款基于NXP i.MX 8M Mini的四核ARM Cortex-A53 + 单核ARM Cortex-M4异构多核处理器设计的高端工业级核心板,A ...

  4. OpenStack 下 CentOS6.X 镜像网络初始化失败问题排查

    问题表现 在我的 OpenStack 集群上迁移了一批老旧的镜像(从其他三方云平台过来的)发现这批镜像在使用 ConfigDrive 的方式注入配置初始化时无法对非首张网卡镜像初始化(后经过测试非 C ...

  5. Linux使用Tomcat常用命令

    切换到tomcat主目录下 cd usr/local/tomcat # 1.启动tomcat服务 # 方式一:直接启动 bin/startup.sh # 方式二:作为服务启动(推荐) nohup bi ...

  6. Vue 3 后端错误消息处理范例

    1. 错误消息格式 前后端消息传递时,我们可以通过 json 的 errors 字段传递错误信息,一个比较好的格式范例为: { errors: { global: ["网络错误"] ...

  7. 【游记】CSP 2023

    day 0 和 printfmingren 整理了一下不会的知识点,发现有点多,遂开摆 音游真的太好玩了 对着<算法竞赛进阶指南>复习了下对拍器的写法,把部分算法的模板又打了一遍 感觉前途 ...

  8. SQL:聚集索引和非聚集索引

    聚集(clustered)索引,也叫聚簇索引 定义:数据行的物理顺序与列值(一般是主键的那一列)的逻辑顺序相同,一个表中只能拥有一个聚集索引. 注:第一列的地址表示该行数据在磁盘中的物理地址,后面三列 ...

  9. LeetCode513. 找树左下角的值

    题目链接:https://leetcode.cn/problems/find-bottom-left-tree-value/description/ 题目叙述: 给定一个二叉树的 根节点 root,请 ...

  10. RHCA rh442 010 文件系统结构 BDP调优 网卡驱动带宽

    文件系统结构 用户通过虚拟文件系统,访问底层的文件系统 对于一块磁盘而言,MBR + 分区表记录硬盘的信息 对于一个分区而言,这个分区的第一个块,superblock,超级块,记录分区元数据信息 对于 ...