CMake 中的 PACKAGE_VERSION_COMPATIBLE 和 PACKAGE_VERSION_UNSUITABLE 有什么区别?

Fir*_*ger 5 cmake

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

  • PACKAGE_VERSION_COMPATIBLE
  • PACKAGE_VERSION_UNSUITABLE

根据它们用于的文档

PACKAGE_VERSION_COMPATIBLE

如果版本兼容,则为真

PACKAGE_VERSION_UNSUITABLE

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

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

有人可以启发我了解兼容和(不)合适之间的区别,并举一个例子,其中两个值都是truefalse

小智 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没有请求版本,则包是好的(有或没有 EXACT 并不重要)
  • 如果UNSUITABLE未设置,EXACT未设置,设置:如果不需要精确版本,COMPATIBLE则软件包很好find_package
  • 如果UNSUITABLE没有设置,EXACT则设置:包好

因此,PACKAGE_VERSION_COMPATIBLEPACKAGE_VERSION_UNSUITABLE并不排他:

  • PACKAGE_VERSION_UNSUITABLE无条件丢弃包裹
  • PACKAGE_VERSION_COMPATIBLEfind_package仅当未设置 EXACT 时才允许包,并且如果未请求版本则无效

希望有帮助 =)