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



我已经看到了在Cmake中设置/使用缓存变量的不同方法。 标准是什么?

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

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

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

它不仅仅是为 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)也为 false,但不设置其值就不可能声明参数。因此,空字符串作为默认值是能够使用简单if(NVTX_ROOT_DIR)来检查参数设置是否缺失的合乎逻辑的选择。

最新更新