当我写一个PACKAGEConfig.cmake
文件时,有没有办法指定如果包含一个特定的其他包,它应该是最小版本?
更长的版本:
我有一个包Foo,我写了一个FooConfig.cmake
。并且有一个包Bar,存在于许多版本中。
如果是第三方
find_package(Foo)
,一切都很好。find_package(Bar)
,一切都很好。#include "foo.h"; #include "bar.h"
导致编译器错误)。较新版本的Bar很好。如果第三方做find_package(Foo); find_package(Bar 2.0)
,那么一切都很好。解决此问题的最佳方法是什么?被黑客攻击的解决方案是伪造依赖项并将find_package(Bar 2.0)
添加到FooConfig.cmake
。虽然我不喜欢这样,但如果Bar不可用,这将打破用例1。
我想我可以将if(Bar_FOUND)
添加到FooConfig.cmake
,如果Bar版本太低,则会导致失败。 (理想情况下会提供有用的错误消息),但我不知道这是否只有在find_package(Foo)
和find_package(Bar)
位于"正确的情况下才能生效。订购第三方项目。
(具体示例是我添加了this range-v3 addition来创建range-v3-config.cmake
,然后尝试在另一个项目中使用range-v3,其中包括boost。这样配置得很好但是在构建时失败因为我选择了提升1.53,由于碰撞range_mutable_iterator
定义,显然太旧而无法使用range-v3