本文给出了 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. 06-Python类与对象

    什么是类 百度百科: 类是对象的抽象,对象是对客观事物的抽象. 用通俗的话来说: 类是类别的意思,是数据类型. 对象是类别下的具体事物. 也就是说: 类是数据类型,对象是变量. 比如: 自定义一种数据 ...

  2. TrustZone与高通

    改编自:https://blog.csdn.net/guyongqiangx/article/details/78020257 介绍 导读 Q:什么是Trust Zone A:Trust Zone:是 ...

  3. Xilinux PS与PL交互:裸机程序读写FPGA-REG

    背景 当时在搞ZYNQ驱动的时候,出于TDD的思想,从最简单的功能开始验证.因此就涉及到了下面的需求. PL侧会提供寄存器地址供PS端读写,这部分的寄存器在PL侧作为Avalon的IP,对PS端来说, ...

  4. Tutorial: How to install GNU MCU Eclipse?

    Overview For more flexibility and upgradeability, GNU MCU Eclipse is not packed as a all-inclusive s ...

  5. 创建docker

    创建docker 准备实验环境 1. 安装前准备 Centos7 Linux 内核:官方建议 3.10 以上,3.8以上貌似也可. 1.1 查看当前的内核版本 uname -r 1.2 使用 root ...

  6. C# pythonnet(3)_Butter-worth低通滤波

    Python代码如下 import pandas as pd import numpy as np import matplotlib.pyplot as plt from scipy import ...

  7. OpenCV程序练习(二):图像处理基础

    一.彩色图像像素处理 代码 import cv2 import numpy as np #----------蓝色通道---------- blue=np.zeros((300,300,3),dtyp ...

  8. 全国产T3+FPGA的SPI与I2C通信方案分享

    近年来,随着中国新基建.中国制造2025规划的持续推进,单ARM处理器越来越难胜任工业现场的功能要求,特别是如今能源电力.工业控制.智慧医疗等行业,往往更需要ARM + FPGA架构的处理器平台来实现 ...

  9. oeasy教您玩转linux010206 蒸汽机车 sl

    我们来回顾一下 上一部分我们都讲了什么? 两种字符画 从figlet开始️ 到toilet 字符画选项 变彩色 字体效果 figlet oeasy toilet oeasy 这里面还有什么好玩的游戏可 ...

  10. 题解:P10722 [GESP202406 六级] 二叉树

    题意 一颗 \(n\) 节点的二叉树,每个节点非黑即白,给你 \(Q\) 次操作,每次给你一个 \(u\),把 \(u\) 的子树内所有节点颜色反转,问最终每个节点的颜色. 分析 看到数据范围,首先把 ...