CMake中PACKAGE_VERSION_COMPATIBLE和PACKAGE_VERSION_UNSUITABLE有什么区别?

时间:2016-08-24 15:05:32

标签: cmake

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

  • PACKAGE_VERSION_COMPATIBLE
  • PACKAGE_VERSION_UNSUITABLE

根据the documentation用于

  

PACKAGE_VERSION_COMPATIBLE

     

如果版本兼容,则为真

     

PACKAGE_VERSION_UNSUITABLE

     

如果不适合任何版本

,则为真

让我感到困惑。 CMake 2.6.2中引入了PACKAGE_VERSION_UNSUITABLE。但它似乎与PACKAGE_VERSION_COMPATIBLE互斥。那它为什么存在?

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

1 个答案:

答案 0 :(得分:2)

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

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

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

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

因此,PACKAGE_VERSION_COMPATIBLEPACKAGE_VERSION_UNSUITABLE 不是互斥的:

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

希望有所帮助 =)