在 CMake 中使用空字符串设置缓存变量有什么意义?

What's the point of using empty string to set cache variable in CMake?

我见过在 Cmake 中设置/使用缓存变量的不同方法。 标准是什么?

将空字符串 ("") 设置为缓存变量有什么意义?

例子

set(NVTX_ROOT_DIR "" CACHE PATH "Folder contains NVIDIA NVTX")

What's the point of setting an empty string ("") to the cache variable?

不仅仅是设置一个CACHE变量的值。

命令流 set(CACHE) 通常执行 两件事:

  1. 声明 参数(指定描述和可能的类型)
  2. 设置参数的默认值。 (也就是说,如果参数已经设置,它的值不会改变)。

CACHE 变量的空值可能意味着此变量表示的 参数 未设置。根据使用它的项目,这可以解释为:

  • 不要使用参数描述的功能。
  • 发出一个错误提示参数应该由用户设置。

在 CMake 代码中检查参数可以用简单的 if(VAR):

实现
if(NVTX_ROOT_DIR)
  # The parameter is set
else()
  # The parameter is not set
endif()

虽然 if(NVTX_ROOT_DIR) 为假,即使 变量 未设置 ,但如果不设置其值,则无法声明该参数.因此,空字符串作为默认值是能够使用简单 if(NVTX_ROOT_DIR) 检查参数设置是否存在的合理选择。