首页 > 其他分享 >cmake 变量定义set 和unset

cmake 变量定义set 和unset

时间:2024-12-14 16:58:18浏览次数:6  
标签:缓存 cmake 变量 条目 set 设置 unset

cmake 变量定义set 和unset


在cmake 中变量有两种:

  • 变量(普通、缓存)
  • 环境变量

1. 变量定义

1.1 普通变量定义

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

在CMAKE 中没有定义类型概念,set定义变量都AUTO类型,系统自动分配。
在使用set关键字时,定义一个变量必须给出变量值value;如果没有给出变量值,则认为清空变量,相当于unset(variable).

如果给出PARENT_SCOPE选项,则变量将设置在当前范围之上的范围中。每个新目录或function() 命令创建一个新范围。还可以使用以下命令创建范围 block()命令。 set(PARENT_SCOPE)将变量的值设置到父目录、调用函数或包含范围(以适用于当前情况的为准)。变量值的先前状态在当前作用域中保持不变(例如,如果它之前未定义,则它仍然是未定义,如果它有一个值,它仍然是该值)。
block(PROPAGATE)return(PROPAGATE)命令可以用作set (PARENT_SCOPE)的替代方法 和un set (PARENT_SCOPE)命令来更新父范围。

1.2 设置缓存条目

格式:

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

设置给定的缓存<variable> (缓存条目)。由于缓存条目旨在提供用户设置的表值,因此默认情况下不会覆盖现有的缓存条目。使用FORCE选项覆盖现有条目。
<type> 必须指定为以下之一:
BOOL
Boolean ON/OFF 值。 cmake-gui(1) 提供了一个复选框。
FILEPATH
磁盘上文件的路径。 cmake-gui(1) 提供文件对话框。
PATH
磁盘上目录的路径。 cmake-gui(1) 提供文件对话框。
STRING
一行文字。如果设置了 STRINGS 缓存条目属性, cmake-gui(1) 会提供文本字段或下拉选择。
INTERNAL
一行文字。 cmake-gui(1) 不显示内部条目。它们可用于跨运行持久存储变量。使用此类型意味着 FORCE
<docstring> 必须指定为一行文本,提供选项的快速摘要以呈现给 cmake-gui(1) 用户。
如果在调用之前缓存条目不存在或者给出了 FORCE 选项,则缓存条目将被设置为给定值。

[!NOTE]
如果已存在同名的普通变量,则将无法直接访问缓存变量的内容(请参阅 rules of variable evaluation )。如果策略 CMP0126 设置为 OLD ,则当前作用域中的任何正常变量绑定都将被删除。
如果缓存条目是由用户通过 -D<var>=<value> 选项在 cmake(1) 命令行上创建的,但未指定类型,则该缓存条目可能在调用之前就已存在,但没有设置类型。在这种情况下, set 命令将添加类型。此外,如果 <type>PATHFILEPATH ,并且命令行上提供的 <value> 是相对路径,则 set 命令将该路径视为相对于当前工作目录并将其转换为绝对路径。

2 环境变量设置

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

Environment Variable 设置为给定值。 $ENV{<variable>} 的后续调用将返回这个新值。

此命令仅影响当前的 CMake 进程,而不影响调用 CMake 的进程,也不会影响整个系统环境,也不会影响后续构建或测试进程的环境。

如果 ENV{<variable>} 之后没有给出参数或者 <value> 是空字符串,则此命令将清除环境变量的任何现有值。

<value> 之后的参数将被忽略。如果发现额外的参数,则会发出作者警告。

3 unset 取消设置

unset(<variable> [CACHE | PARENT_SCOPE])
unset(ENV{<variable>})

就是取消设置的定义,让变量名返回为空,使之前定义的变量不起作用。

标签:缓存,cmake,变量,条目,set,设置,unset
From: https://blog.csdn.net/qq_44992918/article/details/144472944

相关文章

  • windows set alias
    ItisrathereasytosetuppermanentaliasesintheWindowscommandpromptusingthe @DOSKEY commandand HKCU\Software\Microsoft\CommandProcessor Autorunoption.Quickstep-by-stepguide:Createanewbatchfile,callit Alias.bat.Copy/pastethetex......
  • Towards Robust Evaluation: A Comprehensive Taxonomy of Datasets and Metrics for
    本文是LLM系列文章,针对《TowardsRobustEvaluation:AComprehensiveTaxonomyofDatasetsandMetricsforOpenDomainQuestionAnsweringintheEraofLargeLanguageModels》的翻译。迈向稳健评估:大语言模型时代开放领域问答的数据集和指标的综合分类摘要1......
  • 达梦DM.Microsoft.EntityFreameworkCore查询报错invalid cast from DateTime to DateT
    1.问题达梦dotnetefcore的驱动DM.Microsoft.EntityFreameworkCore。如果实体中存在DateTimeOffset类型字段时,查询报错:invalidcastfromDateTimetoDateTimeOffset。Invalidcastfrom'System.DateTime'to'System.DateTimeOffset'System.Convert.DefaultToType(Sy......
  • QT windows下使用CMake,设置步骤 mingw lvgl编译运行
    参考https://blog.csdn.net/qq_33963083/article/details/95920238针对我安装的qt,目录如下然后用qtcreate打开打开项目中的CMakeLists.txt可以使用的项目如下gitclone--recursivehttps://github.com/Sanya-123/lvgl_port_qt.git......
  • jmeter压测报Java reset的解决办法
    解决办法:1、在注册表中按照下面的数据项去设置。win+r打开dos窗口,输入regedit,可打开注册表。一般不建议新手直接去修改注册表。2、新建txt,保存以下脚本修改后缀为reg文件,编辑值如下,保存后双击执行;重启电脑,再次压测即不会出现报错。解析中值为10进制,下方脚本已全转换为16进制。W......
  • Ubuntu下vscode cmake jlink stm32 开发环境搭建
    安装gcc-arm-none-eabiJLink或者stm32cubeide自带前面两者安装vscode扩展CMakeToolsCortex-Debug修复vscode爆红.vscode/c_cpp_properties.json{"configurations":[{"name":"Linux","includePath"......
  • Settings.Global
    `publicclassSetGlobal{privatestaticSetGlobalsg;privatestaticContextmContext;publicstaticfinalStringkey="negativescreen_dataKey";publicstaticSetGlobalgetInstance(Contextcontext){mContext=context;if(sg==nu......
  • 油猴(Tampermonkey)时间加速、定时器setInterval、setTimeout
    时间加速网页主要使用一些定时器来作为时间间隔,可以劫持比如setInterval函数,将定时器的时间缩短。举例://将系统的setInterval保存lethookInterval=window.setInterval;//使用函数将时间缩短一半window.setInterval=function(a,b){returnhookInterval(a,b/2);}网络......
  • 【他山之石】Leading-Trim: The Future of Digital Typesetting:数字排版的未来 —— L
    文章目录【他山之石】Leading-Trim:TheFutureofDigitalTypesetting:数字排版的未来——Leading-TrimHowanemergingCSSstandardcanfixoldproblemsandraisethebarforwebapps1.Theproblemwithtextboxestoday2.Howwegothere:ahistorylesso......
  • (SA002)在运行`cmake .`时发生的错误: "Operation timed out after 30000 milliseconds
    (SA002)在运行cmake.时发生的错误:"Operationtimedoutafter30000milliseconds..."在使用cmake.编译vsag时出现错误:[1448bytesdata][1448bytesdata][1448bytesdata]Operationtimedoutafter30000millisecondswith37498381outof100717067bytesreceive......