3

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

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

例子

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

1 回答 1

2

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

它不仅仅是为 CACHE 变量设置值。

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

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

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

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

在 CMake 代码检查中,参数可以通过简单的方式实现if(VAR)

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

Whileif(NVTX_ROOT_DIR)为假,即使变量设置,也无法在不设置其值的情况下声明参数。因此,空字符串作为默认值是能够使用 simpleif(NVTX_ROOT_DIR)来检查参数设置是否缺失的合理选择。

于 2020-01-22T21:29:32.313 回答