在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
相关产品推荐
相关产品推荐

