CMake中PACKAGE_VERSION_COMPATIBLE和PACKAGE_VERSION_UNSUITABLE有什么区别?

5
在cmake中使用find_package(...)加载软件包时,版本文件必须声明5个变量,其中两个是:
  • PACKAGE_VERSION_COMPATIBLE
  • PACKAGE_VERSION_UNSUITABLE
根据文档,它们用于:

PACKAGE_VERSION_COMPATIBLE

如果版本兼容,则为true

PACKAGE_VERSION_UNSUITABLE

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

这让我感到困惑。CMake 2.6.2引入了PACKAGE_VERSION_UNSUITABLE。然而,它似乎与PACKAGE_VERSION_COMPATIBLE相互排斥。那么它的存在是为什么?
有人能否向我解释兼容和(不)适合之间的区别,并且可以给出一个例子,在该例子中,这两个值都是truefalse
1个回答

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没有要求EXACT版本,则该包是好的
  • 如果未设置UNSUITABLE、设置了EXACT:则该包是好的
因此,PACKAGE_VERSION_COMPATIBLEPACKAGE_VERSION_UNSUITABLE并不互斥:
  • PACKAGE_VERSION_UNSUITABLE无条件丢弃包
  • PACKAGE_VERSION_COMPATIBLE仅在EXACT未设置且find_package没有请求版本时允许包,否则无效
希望这有所帮助 =)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接