我已经看到了在Cmake中设置/使用缓存变量的不同方法。 标准是什么?
为缓存变量设置空字符串(""
(有什么意义?
例
set(NVTX_ROOT_DIR "" CACHE PATH "Folder contains NVIDIA NVTX")
为缓存变量设置空字符串 ("( 有什么意义?
它不仅仅是为 CACHE 变量设置一个值。
命令流set(CACHE)
通常执行两件事:
- 声明 参数(分配描述和可能的类型(
- 设置参数的默认值。(也就是说,如果已设置参数,则不会更改其值(。
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)
来检查参数设置是否缺失的合乎逻辑的选择。