在 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)
通常执行 两件事:
- 声明 参数(指定描述和可能的类型)
- 设置参数的默认值。 (也就是说,如果参数已经设置,它的值不会改变)。
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)
检查参数设置是否存在的合理选择。
我见过在 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)
通常执行 两件事:
- 声明 参数(指定描述和可能的类型)
- 设置参数的默认值。 (也就是说,如果参数已经设置,它的值不会改变)。
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)
检查参数设置是否存在的合理选择。