当前位置: 首页 > news >正文

CMake系列讲解(入门篇)1.8 基础命令CMake-set() unset()


基础命令set() unset()

〓〓〓〓〓〓〓〓踏实学CMake总目录〓〓〓〓〓〓〓〓〓〓


8. set() unset()

在CMake中,set用于设置变量的值。这个变量可以为普通变量、Cache或者是环境变量。
如果提供了一个或多个 <value> 参数,则将 <variable> 设置为给定的值。
如果没有提供 <value> 参数,则取消设置 <variable>,将其值设置为无,相当于unset

8.1 设置普通变量

8.1.1 命令格式

set(<variable> <value>... [PARENT_SCOPE])
unset(<variable>... [PARENT_SCOPE])

8.1.2 参数说明

  • variable:要被赋值的变量
  • value:要赋给变量的值

PARENT_SCOPE是一个修饰符,用于指定变量的作用域为父级作用域。

当在函数或宏中设置变量时,使用PARENT_SCOPE修饰符可以将该变量的作用域提升到父级作用域,使得在函数或宏外部也能够访问和使用该变量。 如下示例

8.1.3 使用示例

function(set_variable)set(variable "Hello, World!" PARENT_SCOPE)
endfunction()set_variable()
message("${variable}")  # 输出:Hello, World!

在上面的示例中,set_variable函数内部使用set命令设置了变量variable的值,并使用PARENT_SCOPE修饰符将其作用域提升到调用函数的作用域。因此,message命令在函数外部打印出了变量variable的值。

需要注意的是,PARENT_SCOPE修饰符只能将变量的作用域提升到直接的父级作用域,无法跳过中间的作用域。如果要将变量的作用域提升到更高层次的作用域,需要在对应的父级作用域中再次使用set命令。

8.2 设置Cache变量

set命令可以用于设置缓存变量(cache entry),并提供用户可设置的值。

8.2.1 命令格式

set(<variable> <value>... CACHE <type> <docstring> [FORCE])
unset(<variable>... CACHE)

8.2.2 参数说明

  • <variable>:要设置的缓存变量的名称。
  • <value>:要为缓存变量设置的值(可以有多个)。
  • CACHE:指定该变量是一个缓存变量。
  • <type>:变量的类型,可以是以下之一:
    • BOOL:布尔类型,即开/关(ON/OFF)值。cmake-gui 提供一个复选框。
    • FILEPATH:指向磁盘上文件的路径。cmake-gui 提供一个文件对话框。
    • PATH:指向磁盘上目录的路径。cmake-gui 提供一个文件对话框。
    • STRING:字符串类型,即文本行。cmake-gui 提供一个文本字段或下拉选择(如果设置了 STRINGS 缓存变量属性)。
    • INTERNAL:内部类型,即文本行。cmake-gui 不显示内部变量。内部变量可用于持久保存跨运行的变量。使用此类型会隐含使用 FORCE。
  • FORCE:可选项,用于强制覆盖现有的缓存变量。缓存默认是不覆盖的,如果在调用之前缓存项不存在,或者给出了FORCE选项,那么缓存项将被设置为给定的值。

8.2.3 使用示例:

cmake_minimum_required(VERSION 3.5)
project(hello_library)set(MY_VARIABLE "Hello, World!" CACHE STRING "A greeting message" FORCE)
message("${MY_VARIABLE}")   # 输出Hello, World!set(MY_VARIABLE "Good Morning!" CACHE STRING "A greeting message")
message("${MY_VARIABLE}")   # 输出Hello, World!因为不加FORCE默认不覆盖set(MY_VARIABLE "Good Morning!" CACHE STRING "A greeting message" FORCE)
message("${MY_VARIABLE}")   # 输出Good Morning! 加了FORCE强制覆盖

注意,如果已经存在同名的普通变量,则不能直接访问缓存变量的内容。最好不要存在同名的。

此外,如果在调用CMake命令时,用户通过命令行选项"-D<var>=<value>"来创建缓存变量,并且在这种情况下,如果没有指定类型,缓存变量将存在但没有类型。对于特殊类型的变量(如路径类型),相对路径会被转化为绝对路径,以确保准确性。

例如:在执行CMake命令时,使用以下语句:
cmake -DMY_PATH="../relative/path",创建了一个缓存变量,但未指定类型。为了为该变量设置类型并将相对路径转换为绝对路径,可以在CMakeLists.txt文件中使用"set"命令:set(MY_PATH "${MY_PATH}" PATH),这样,通过"set"命令,为变量"MY_PATH"添加了类型"PATH"。同时,如果"MY_PATH"的值是相对路径,CMake将将其视为相对于当前工作目录,并将其转换为绝对路径。

8.3 设置系统变量

设置环境变量的值,执行这个命令时,它只会对当前的 CMake 进程中的环境变量进行修改。它不会影响调用 CMake 的进程的环境变量,整个系统环境,或者后续构建或测试过程的环境变量。

8.3.1 命令格式

set(ENV{<variable>} [<value>])
unset(ENV{<variable>})

8.3.2 参数说明

  • <variable>: 是环境变量的名称
  • <value>: 要设置的值

如果没有提供<value> 或者<value> 是空字符串,该命令将清除环境变量的任何现有值。
在 set(ENV{} []) 命令之后提供的任何参数都会被忽略。如果发现额外的参数,将会发出作者警告。

8.3.3 使用示例

cmake_minimum_required(VERSION 3.5)
project(setCommand)
# 设置一个名为 MY_VARIABLE 的环境变量,其值为 Hello World:
set(ENV{MY_VARIABLE} "Hello World")
message(">>> MY_VARIABLE: $ENV{MY_VARIABLE}")
# 清除名为 PATH 的环境变量的值
set(ENV{MY_VARIABLE})
message(">>> MY_VARIABLE: $ENV{MY_VARIABLE}")
# 设置一个名为 NUM_THREADS 的环境变量,其值为 4set(ENV{NUM_THREADS} 4)
message(">>> NUM_THREADS: $ENV{NUM_THREADS}")
# 清除名为 DEBUG_FLAG 的环境变量的值:
unset(ENV{NUM_THREADS})
message(">>> NUM_THREADS: $ENV{NUM_THREADS}")

输出如下:

>>> MY_VARIABLE: Hello World
>>> MY_VARIABLE: 
>>> NUM_THREADS: 4
>>> NUM_THREADS:

附:返回总目录的传送门如下:

〓〓〓〓〓〓〓〓踏实学CMake总目录〓〓〓〓〓〓〓〓〓〓

相关文章:

CMake系列讲解(入门篇)1.8 基础命令CMake-set() unset()

基础命令set() unset() 〓〓〓〓〓〓〓〓踏实学CMake总目录〓〓〓〓〓〓〓〓〓〓 8. set() unset() 在CMake中&#xff0c;set用于设置变量的值。这个变量可以为普通变量、Cache或者是环境变量。 如果提供了一个或多个 <value> 参数&#xff0c;则将 <variable> 设…...

【C++ 学习 ㉙】- 详解 C++11 的 constexpr 和 decltype 关键字

目录 一、constexpr 关键字 1.1 - constexpr 修饰普通变量 1.2 - constexpr 修饰函数 1.3 - constexpr 修饰类的构造函数 1.4 - constexpr 和 const 的区别 二、decltype 关键字 2.1 - 推导规则 2.2 - 实际应用 一、constexpr 关键字 constexpr 是 C11 新引入的关键字…...

js获取视频编码

一.背景 有些浏览器不支持某些视频的编码方式导致播放出现问题&#xff0c;这个时候要限制视频上传 二.插件 https://unpkg.com/mediainfo.js0.1.4/dist/mediainfo.min.js 三.完整html代码 <!DOCTYPE html> <html lang"en"> <head><meta ch…...

560. 和为 K 的子数组 --力扣 --JAVA

题目 给你一个整数数组 nums 和一个整数 k &#xff0c;请你统计并返回 该数组中和为 k 的连续子数组的个数 。 子数组是数组中元素的连续非空序列。 解题思路 数组项累加可以使用双层循环进行遍历&#xff1b;子数组的长度是不确定的&#xff0c;也可能存在1 1 2和1 1 - 1…...

【趣味随笔】农业机器人的种类与发展前景

&#x1f4e2;&#xff1a;如果你也对机器人、人工智能感兴趣&#xff0c;看来我们志同道合✨ &#x1f4e2;&#xff1a;不妨浏览一下我的博客主页【https://blog.csdn.net/weixin_51244852】 &#x1f4e2;&#xff1a;文章若有幸对你有帮助&#xff0c;可点赞 &#x1f44d;…...

使用CountdownLatch和线程池批量处理http请求,并处理响应数据

背景和问题 ​ 背景&#xff1a;最近项目的一个接口数据&#xff0c;需要去请求其他多个服务器的数据&#xff0c;然后统一返回&#xff1b; 问题点&#xff1a;如果遍历所有的服务器地址&#xff0c;然后串行请求就会出现请求时间过长&#xff0c;加入需要请求十个服务器&…...

记录--怎么写一个可以鼠标控制旋转的div?

这里给大家分享我在网上总结出来的一些知识&#xff0c;希望对大家有所帮助 说在前面 鼠标控制元素旋转在现在也是一个很常见的功能&#xff0c;让我们从实现div元素的旋转控制开始来了解元素旋转的具体原理和实现方法吧。 效果展示 体验地址 code.juejin.cn/pen/7290719… 实现…...

JVM第十八讲:调试排错 - Java 问题排查之工具单

调试排错 - Java 问题排查之工具单 程序员想要有更好的发展&#xff0c;排查问题的能力一定得加强。举个例子&#xff1a;cpu100% 怎么排查&#xff0c;线上接口逐渐变慢了该怎么排查&#xff1f;慢查询该如何治理&#xff1f;你的思路是啥&#xff1f;本文是JVM第十八讲&#…...

JAVA基础-正则表达式(12)

目录 Java 正则表达式正则表达式实例正则表达式语法 Matcher 类的方法索引方法查找方法替换方法start 和 end 方法 Java 正则表达式 正则表达式定义了字符串的模式。 正则表达式可以用来搜索、编辑或处理文本。 正则表达式并不仅限于某一种语言&#xff0c;但是在每种语言中有细…...

[论文笔记]GPT-1

引言 今天带来论文Improving Language Understanding by Generative Pre-Training的笔记,它的中文题目为:通过生成式预训练改进语言理解。其实就是GPT的论文。 自然语言理解可以应用于大量NLP任务上,比如文本蕴含、问答、语义相似和文档分类。虽然无标签文本语料是丰富的,…...

【3D 图像分割】基于 Pytorch 的 VNet 3D 图像分割1(综述篇)

在上一个关于3D 目标的任务&#xff0c;是基于普通CNN网络的3D分类任务。在这个任务中&#xff0c;分类数据采用的是CT结节的LIDC-IDRI数据集&#xff0c;其中对结节的良恶性、毛刺、分叶征等等特征进行了各自的等级分类。感兴趣的可以直接点击下方的链接&#xff0c;直达学习&…...

css之Flex弹性布局

文章目录 &#x1f415;前言&#xff1a;&#x1f3e8;定义flex容器 display:flex&#x1f3e8;在flex容器中子组件进行排列&#x1fa82;行排列 flex-direction: row&#x1fa82;将行排列进行翻转排列 flex-direction: row-reverse&#x1f3c5;按列排列 flex-direction: col…...

web.xml配置详解

在Java Web应用程序中&#xff0c;web.xml是一个XML配置文件&#xff0c;用于定义和配置Servlet、过滤器、监听器和其他Web应用程序组件的行为和属性。web.xml文件通常位于Web应用程序的WEB-INF目录下&#xff0c;用于描述Web应用程序的部署信息和配置。以下是一些web.xml配置的…...

关于我学习Go语言在CSDN分享的心得体会

最近我一直在学习Go语言&#xff0c;并通过CSDN平台分享我的学习心得和体会。在这篇博客中&#xff0c;我将与大家分享我在学习Go语言过程中的经验和收获。希望通过这篇博客能够帮助其他Go语言初学者更好地掌握这门语言&#xff0c;并与广大Go语言爱好者进行交流和互动。 选择…...

Java类的Builder应用以及使用@Data和@Builder高效应用Builder

⭐Java Builder模式&#xff1a;是Java设计模式之一&#xff0c;它属于对象创建型模式&#xff0c;是将一个复杂对象的构建与它的表示分离&#xff0c;使得同样的构建过程可以创建不同的表示。 结论一&#xff1a;使用lombok的Data和Builder注解构建Java类的Builder简洁高效&am…...

【Qt控件之QTabWidget】介绍及使用

描述 QTabWidget类提供了一个带有选项卡的小部件堆栈。 选项卡小部件提供了一个选项卡栏&#xff08;参见QTabBar&#xff09;和一个“页面区域”&#xff0c;用于显示与每个选项卡相关联的页面。默认情况下&#xff0c;选项卡栏显示在页面区域的上方&#xff0c;但可以使用…...

Linux实战——网络连接模式的三种模式

Linux可以分为三种网络模式&#xff1a; 桥接模式 &#xff08;vmnet0) 仅主机模式 (vmnet1) NAT模式 (vmnet8) 当我们下载了vmware之后&#xff0c;在电脑会出现两个虚拟网卡&#xff0c;VMware Network Adapter VMnet1、VMware Network Adapter VMnet8。 可以通过查找 控…...

嵌入式实时操作系统的设计与开发(任意大小的内存管理)

任意大小的内存管理是根据用户需要为其分配内存&#xff0c;即用户需要多大内存就通过acoral_malloc2()为之分配多大内存&#xff0c;同时每块分配出去的内存前面都有一个控制块&#xff0c;控制块里记录了该块内存的大小。 同时未分配出去的内存也有一个控制块&#xff0c;寻…...

文件读取结束的判定

大家好啊&#xff0c;我们今天来补充文件操作的读取结束的判定。 被错误使用的feof 牢记&#xff1a;在文件读取过程中&#xff0c;不能用feof函数的返回值直接用来判断文件的是否结束而是应用于当文件读取结束的时候&#xff0c;判断是读取失败结束&#xff0c;还是遇到文件尾…...

《基于 Vue 组件库 的 Webpack5 配置》9.module.exports 可为数组类型且注意编译顺序

module.exports常见是对象类型&#xff0c;其实也可用数组类型&#xff1b;注意编译顺序&#xff0c;从后往前 编&#xff1a; 也就是说先编 another.js&#xff0c;再编 index.js&#xff1b;所以代码第 9 行不能设置为 true&#xff0c;仅在第一次&#xff0c;也就是代码第19…...

linux之kylin系统nginx的安装

一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源&#xff08;HTML/CSS/图片等&#xff09;&#xff0c;响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址&#xff0c;提高安全性 3.负载均衡服务器 支持多种策略分发流量…...

拉力测试cuda pytorch 把 4070显卡拉满

import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试&#xff0c;通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小&#xff0c;增大可提高计算复杂度duration: 测试持续时间&#xff08;秒&…...

什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南

文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/55aefaea8a9f477e86d065227851fe3d.pn…...

打手机检测算法AI智能分析网关V4守护公共/工业/医疗等多场景安全应用

一、方案背景​ 在现代生产与生活场景中&#xff0c;如工厂高危作业区、医院手术室、公共场景等&#xff0c;人员违规打手机的行为潜藏着巨大风险。传统依靠人工巡查的监管方式&#xff0c;存在效率低、覆盖面不足、判断主观性强等问题&#xff0c;难以满足对人员打手机行为精…...

MySQL 主从同步异常处理

阅读原文&#xff1a;https://www.xiaozaoshu.top/articles/mysql-m-s-update-pk MySQL 做双主&#xff0c;遇到的这个错误&#xff1a; Could not execute Update_rows event on table ... Error_code: 1032是 MySQL 主从复制时的经典错误之一&#xff0c;通常表示&#xff…...

前端开发者常用网站

Can I use网站&#xff1a;一个查询网页技术兼容性的网站 一个查询网页技术兼容性的网站Can I use&#xff1a;Can I use... Support tables for HTML5, CSS3, etc (查询浏览器对HTML5的支持情况) 权威网站&#xff1a;MDN JavaScript权威网站&#xff1a;JavaScript | MDN...

电脑桌面太单调,用Python写一个桌面小宠物应用。

下面是一个使用Python创建的简单桌面小宠物应用。这个小宠物会在桌面上游荡&#xff0c;可以响应鼠标点击&#xff0c;并且有简单的动画效果。 import tkinter as tk import random import time from PIL import Image, ImageTk import os import sysclass DesktopPet:def __i…...

leetcode_69.x的平方根

题目如下 &#xff1a; 看到题 &#xff0c;我们最原始的想法就是暴力解决: for(long long i 0;i<INT_MAX;i){if(i*ix){return i;}else if((i*i>x)&&((i-1)*(i-1)<x)){return i-1;}}我们直接开始遍历&#xff0c;我们是整数的平方根&#xff0c;所以我们分两…...

react更新页面数据,操作页面,双向数据绑定

// 路由不是组件的直接跳转use client&#xff0c;useEffect&#xff0c;useRouter&#xff0c;需3个结合&#xff0c; use client表示客户端 use client; import { Button,Card, Space,Tag,Table,message,Input } from antd; import { useEffect,useState } from react; impor…...

【threejs】每天一个小案例讲解:创建基本的3D场景

代码仓 GitHub - TiffanyHoo/three_practices: Learning three.js together! 可自行clone&#xff0c;无需安装依赖&#xff0c;直接liver-server运行/直接打开chapter01中的html文件 运行效果图 知识要点 核心三要素 场景&#xff08;Scene&#xff09; 使用 THREE.Scene(…...