You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在CMake中如何判断选项是否被显式设置?

判断CMake选项是否被显式设置

要判断CMake选项是否被显式设置(哪怕其值和默认值一致),可以通过在定义选项前检查变量是否已存在于缓存中来实现,具体步骤如下:

  • 在调用option()命令定义目标选项之前,先检查该变量是否已被定义:

    # 检查目标选项是否已存在于缓存
    if(DEFINED MY_OPTION)
        set(MY_OPTION_WAS_EXPLICITLY_SET ON)
    else()
        set(MY_OPTION_WAS_EXPLICITLY_SET OFF)
    endif()
    
    # 定义选项(仅当变量未定义时会设置默认值)
    option(MY_OPTION "这是一个示例选项" ON)
    
  • 之后你就可以通过MY_OPTION_WAS_EXPLICITLY_SET变量来判断:

    • 如果值为ON:说明MY_OPTION是通过命令行(如-DMY_OPTION=ON)、脚本显式设置缓存变量等方式指定的,哪怕值和默认值一致。
    • 如果值为OFF:说明MY_OPTION使用的是option()命令中指定的默认值。

原理说明

CMake的option()命令逻辑是:只有当目标变量未在缓存中定义时,才会将其设置为指定的默认值。如果变量已经存在(无论值是什么),option()不会修改它。因此提前检查变量是否存在,就能准确区分“显式设置”和“使用默认值”的情况。

内容的提问来源于stack exchange,提问作者einpoklum

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.11 22:44:56