cmake学习之- set
- 最后更新: 2019-06-06
一、简单介绍
set 和 unset 为一对相反的指令,分别为设置变量以及取消设置变量。
什么是变量?
- 变量就是用于保存值的存储单元。
set有哪几种?set有三种,分别为: 设置一般变量(Set Normal Variable), 设置缓存变量(Set Cache Entry),设置环境变量(Set Environment Variable)
// 1. 设置一般变量(Set Normal Variable)
set(<variable> <value>... [PARENT_SCOPE]) // 2. 设置缓存变量(Set Cache Entry)
set(<variable> <value>... CACHE <type> <docstring> [FORCE]) // 3. 设置环境变量(Set Environment Variable)
set(ENV{<variable>} [<value>])
变量的作用域
- Function Scope: 在函数内部定义,仅仅在当前函数以及所调用的子函数内有效;
- Directory Scope: 在当前目录的定义的变量,当调用子目录时候,子目录会复制一份父级目录内的变量到子目录中
- Persistent Cache: 持久化的缓存,一般由
CACHE存储起来.
变量的搜索路径
- 在当前 Function Scope 调用内查找,找到后使用,未找到进行下一步;
- 在当前目录下面查找,找到使用,未找到下一步;
- 在 CACHE 中寻找,找到使用,未找到,则为空.
二、设置一般变量(Normal Variable)
set(<variable> <value>... [PARENT_SCOPE])
- 将一个或者多个值
<value>...赋值给变量<variable>, 多个值之间以分号(;)分隔。
2.1 参数解析
- PARENT_SCOPE
- 配置该选项后,表示该变量在父级作用域上有效, 在当前作用域上是无效的;
2.2 Coding
目录结构如下:
rs:cmake-set$ tree
.
├── CMakeLists.txt
├── main.cpp
└── subdir
└── CMakeLists.txt
顶层的 CMakeLists.txt
cmake_minimum_required(VERSION 3.5)
project(DEMO VERSION 10.2.1.3 LANGUAGES CXX C ASM )
# 设置一般变量
set(PNAME rsenjoyer)
set(PGRADE 80 85 90 95)
message("top name = ${PNAME}") # top name = rsenjoyer
message("top grade = ${PGRADE}") #top grade = 80;85;90;95
add_subdirectory(subdir)
message("top after name = ${PNAME}") # top name = rsenjoyer
add_executable(DEMO main.cpp)
子目录的 CMakeLists.txt
set(PNAME jack)
message("sub name = ${PNAME}") # sub name = jack
# 仅仅会改变父级的 PNAME, 对当前的变量不会更改
set(PNAME rose PARENT_SCOPE)
message("sub name = ${PNAME}") #sub name = jack
三、设置缓存变量(Set Cache Entry)
set(<variable> <value>... CACHE <type> <docstring> [FORCE])
作用
- 设置变量并缓存到 CMakeCache.txt
- 默认不会覆盖已缓存(已存在于 CMakeCache.txt )的变量;
3.1 参数解析
类型 type
类型 type 必须为以下的一种
- BOOL
- 布尔值(ON/OFF)
- FILEPATH
- 文件路径
- PATH
- 目录路径
- STRING
- 字符串
- INTERNAL
- 单行文字
- BOOL
描述字符串
<docstring>: 单行文字,用于 CMAKE-GUI 的时提示用户FORCE 用于是否强制更新缓存里面的值,配置后,每次都会强制更新
CMakeCache.txt里面的值
四、设置环境变量(Set Environment Variable)
set(ENV{<variable>} [<value>])
作用
- 设置环境变量
<variable>,值为<value> - 如果
<value>不存在或者为空字符串 表示清除该环境变量
五、环境变量与一般变量区别
参考: https://cmake.org/cmake/help/latest/manual/cmake-language.7.html#cmake-language-variables
cmake学习之- set的更多相关文章
- CMake学习(1)---简单程序与库
cmake是linux平台下重要的工具,可以方便的组织makefile.之前一直在windows平台下进行软件开发,在vs2010的IDE里,只要一点run程序就能跑出结果.但是程序的编译并没有那么简 ...
- cmake学习笔记(五)
在cmake 学习笔记(三) 中简单学习了 find_package 的 model 模式,在cmake 学习笔记(四)中了解一个CMakeCache相关的东西.但靠这些知识还是不能看懂PySide使 ...
- cmake 学习笔记(三)
转自:http://blog.csdn.net/dbzhang800/article/details/6329314 接前面的 Cmake学习笔记(一) 与 Cmake学习笔记(二) 继续学习 cma ...
- cmake 学习笔记(二)
在 Cmake学习笔记一 中通过一串小例子简单学习了cmake 的使用方式. 这次应该简单看看语法和常用的命令了. 简单的语法 注释 # 我是注释 命令语法 COMMAND(参数1 参数2 ...) ...
- CMake学习
CMake学习 本篇分享一下有关CMake的一些学习心得以及相关使用. 作者:AlphaGL.版权所有,欢迎保留原文链接进行转载 :) 本文目录如下: 1.CMake介绍 2.CMake安装与使用 2 ...
- cmake 学习笔记(三) (转)
接前面的 Cmake学习笔记(一) 与 Cmake学习笔记(二) 继续学习 cmake 的使用. 学习一下cmake的 finder. finder是神马东西? 当编译一个需要使用第三方库的软件时,我 ...
- CMake学习笔记四:usb_cam的CMakeLists解析
最近在学习cmake,在完整看了<cmake实践>一书后,跟着书上例程敲了跑了一遍,也写了几篇相关读书笔记,算是勉强基本入门了.所以找了usb_cam软件包的CMakeLists.txt来 ...
- cmake学习资料收集
CMake 学习笔记 : https://www.jianshu.com/p/c417e4ab8b30
- cmake 学习笔记(六)
希望这是现阶段阻碍阅读shiboken和PySide源码的涉及cmake的最后一个障碍 ^ _^ 学习 cmake 的单元测试部分 ctest. 简单使用 最简单的使用ctest的方法,就是在 CMa ...
- cmake 学习笔记(四)
接前面的一二三,学习一下 CMakeCache.txt 相关的东西. CMakeCache.txt 可以将其想象成一个配置文件(在Unix环境下,我们可以认为它等价于传递给configure的参数). ...
随机推荐
- CSS3 基本属性 浅析(含选择器、背景阴影、3D转换、动画等)
1渐进增强原则 2私有前缀 不同浏览器在发布不同版本(一般测试版)时会加前缀,新增属性加上前缀进行支持测试: Chrome浏览器:-webkit-border-radius: 5px; ...
- octave学习
前置安装 octave introduction 杂 clear; close all; clc刷新清空octave 如果写程序后缀名.m help commandname帮助 ;用法同c++ %注释 ...
- LOJ#2132. 「NOI2015」荷马史诗
$n \leq 100000$个数字,放进$k$叉树里,一个点只能放一个数,使所有数字乘以各自深度这个值之和最小的同时,最大深度的数字最小. 哈夫曼.这是我刚学OI那段时间看到的,感觉就是个很无聊的贪 ...
- 介绍一个牛X的样式counter
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...
- Linux文件的权限与属性
由于以前学习Linux的时候没有做比较全面的总结笔记,而且平时大部分工作都在windows上进行,所以关于Linux的一些知识点有所遗忘.近期难得空闲,翻阅书籍,学习<鸟哥的Linux私房菜&g ...
- 牛客网 牛客小白月赛2 D.虚虚实实-无向图判欧拉路径
D.虚虚实实 链接:https://www.nowcoder.com/acm/contest/86/D 这个题是无向图判欧拉路径,首先要判是否连通,然后再判欧拉路径就可以,板子题. 板子来源: ...
- Break Number --AtCoder
题目描述 Takahashi loves numbers divisible by 2.You are given a positive integer N. Among the integers b ...
- POJ 1704 Georgia and Bob [博弈]
题意:一个仅有一行的棋盘上,初始时有n个棋子,每人轮流移动棋子,每次只能移动一枚棋子,棋子在移动时只能向左移动,不能跨过别的棋子或跳出棋盘. 思路:这道题是一道nim游戏的巧妙变形,太棒了. 解决的思 ...
- BZOJ 4197 NOI 2015 寿司晚宴
题面 Description 为了庆祝 NOI 的成功开幕,主办方为大家准备了一场寿司晚宴.小 G 和小 W 作为参加 NOI 的选手,也被邀请参加了寿司晚宴. 在晚宴上,主办方为大家提供了 n−1 ...
- jeffy-vim-v2.8.tgz
vim 配置 jeffy-vim-v2.8.tgz