当包不是实际需要时,在cmake中指定包的必需版本

时间:2017-12-13 16:47:10

标签: cmake

当我写一个PACKAGEConfig.cmake文件时,有没有办法指定如果包含一个特定的其他包,它应该是最小版本?

更长的版本: 我有一个包Foo,我写了一个FooConfig.cmake。并且有一个包Bar,存在于许多版本中。

如果是第三方

  1. 在他们的项目中使用Foo,他们使用find_package(Foo),一切都很好。
  2. 在项目中使用Bar,他们使用find_package(Bar),一切都很好。
  3. 使用Foo和Bar开始混乱。我目前对这些编译的理解是,由于我无法控制的原因,Foo在旧版本中没有与Bar一起工作(仅#include "foo.h"; #include "bar.h"导致编译器错误)。较新版本的Bar很好。如果第三方做find_package(Foo); find_package(Bar 2.0),那么一切都很好。
  4. 解决此问题的最佳方法是什么?被黑客攻击的解决方案是伪造依赖项并将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

0 个答案:

没有答案