【问题标题】:What's the point of using empty string to set cache variable in CMake?在 CMake 中使用空字符串设置缓存变量有什么意义?
【发布时间】:2020-05-09 01:25:51
【问题描述】:

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

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

例子

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

【问题讨论】:

    标签: cmake cmake-language


    【解决方案1】:

    为缓存变量设置一个空字符串(“”)有什么意义?

    这不仅仅是设置 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) 来检查参数设置是否缺失。

    【讨论】:

    • 有没有地方可以更好地理解cmake(除了cmake官方文档)?谢谢
    • @ChaitanyaBapat 您可以从 CMake 标签 About 部分 here 中的链接开始。我也认为this 文章对入门很有帮助。具体来说,对于您的问题,您经常会看到与 CMake 的 find_pathfind_package 命令结合使用的空引号缓存变量,如 here 所示。
    • 由于 NVTX_ROOT_DIR 已被弃用(根据cmake.org/cmake/help/latest/policy/CMP0074.html - *_ROOT 将被用于支持 *_ROOT_DIR),因为它已被弃用,为它设置值是否有意义?
    猜你喜欢
    • 2015-03-11
    • 2021-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-14
    • 2015-09-11
    • 2018-01-07
    • 1970-01-01
    相关资源
    最近更新 更多