在cmake中使用find_package(...)
加载包时,版本文件必须声明5个变量。其中两个是
PACKAGE_VERSION_COMPATIBLE
如果版本兼容,则为真
PACKAGE_VERSION_UNSUITABLE
如果不适合任何版本
,则为真
让我感到困惑。 CMake 2.6.2中引入了PACKAGE_VERSION_UNSUITABLE
。但它似乎与PACKAGE_VERSION_COMPATIBLE
互斥。那它为什么存在?
有人可以告诉我兼容和(非)合适之间的区别,也许举个例子,两个值都是true
或false
?
答案 0 :(得分:2)
可能为时已晚,但为了正义:
有三个变量检查版本:
PACKAGE_VERSION_EXACT
、PACKAGE_VERSION_COMPATIBLE
和 PACKAGE_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_COMPATIBLE
和 PACKAGE_VERSION_UNSUITABLE
不是互斥的:
PACKAGE_VERSION_UNSUITABLE
无条件丢弃包PACKAGE_VERSION_COMPATIBLE
仅在未设置 EXACT 时才允许包,如果 find_package
未请求版本则无效希望有所帮助 =)