【问题标题】:What is the difference between PACKAGE_VERSION_COMPATIBLE and PACKAGE_VERSION_UNSUITABLE in CMake?CMake 中的 PACKAGE_VERSION_COMPATIBLE 和 PACKAGE_VERSION_UNSUITABLE 有什么区别?
【发布时间】:2016-08-24 15:05:32
【问题描述】:

在 cmake 中使用 find_package(...) 加载包时,版本文件必须声明 5 个变量。其中两个是

  • PACKAGE_VERSION_COMPATIBLE
  • PACKAGE_VERSION_UNSUITABLE

根据the documentation,它们用于

PACKAGE_VERSION_COMPATIBLE

如果版本兼容则为真

PACKAGE_VERSION_UNSUITABLE

如果不适合任何版本则为真

这让我很困惑。 PACKAGE_VERSION_UNSUITABLE 已在 CMake 2.6.2 中引入。然而,它似乎与PACKAGE_VERSION_COMPATIBLE 互斥。那么它为什么存在呢?

有人能告诉我兼容和(不)合适之间的区别吗?也许可以举个例子,两个值都是truefalse

【问题讨论】:

    标签: cmake


    【解决方案1】:

    可能为时已晚,但为了伟大的正义: 有三个变量检查​​版本: PACKAGE_VERSION_EXACTPACKAGE_VERSION_COMPATIBLEPACKAGE_VERSION_UNSUITABLE

    您可以在此处找到此变量背后的逻辑:https://github.com/Kitware/CMake/blob/0ae545ebad1b6b2a6c851205854b887d19c8da59/Source/cmFindPackageCommand.cxx#L1270

    我会尝试改写。请注意,为了便于阅读,我删除了变量名称。让我们归结为四种情况:

    • 如果UNSUITABLE 设置:丢弃包而不考虑其他变量
    • 如果UNSUITABLE 未设置,EXACT 未设置,COMPATIBLE 未设置:如果find_package 未请求版本,则包是好的(有或没有 EXACT 都没有关系)
    • 如果 UNSUITABLE 未设置,EXACT 未设置,COMPATIBLE 设置:如果 find_package 不需要 EXACT 版本,则包是好的
    • 如果UNSUITABLE未设置,EXACT设置:包好

    所以,PACKAGE_VERSION_COMPATIBLEPACKAGE_VERSION_UNSUITABLE 不是互斥的:

    • PACKAGE_VERSION_UNSUITABLE 无条件丢弃包
    • PACKAGE_VERSION_COMPATIBLE 仅在未设置 EXACT 时才允许打包,如果 find_package 未请求版本则无效

    希望有所帮助 =)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-05
      • 1970-01-01
      • 1970-01-01
      • 2018-11-24
      • 1970-01-01
      • 1970-01-01
      • 2011-05-03
      • 1970-01-01
      相关资源
      最近更新 更多