【问题标题】:cmake find_package ignores required exact package versioncmake find_package 忽略所需的确切包版本
【发布时间】:2021-03-29 00:01:22
【问题描述】:
Myproject/CMakeLists.txt:
find_package(Foo 2.0 EXACT REQUIRED)

Foo/CMakeLists.txt:
set(Foo_SOVERSION                1)
set(Foo_VERSION ${Foo_SOVERSION}.8)

为什么cmake Myproject 不会失败?它只通知

-- Found Foo: /usr/local/lib/libfoo.so (Required is exact version "2.0")

并且愉快地继续。如果不满足确切要求,如何强制终止?

【问题讨论】:

  • 你生成版本文件了吗? (见WRITE_BASIC_PACKAGE_VERSION_FILE
  • 否,并且没有找到对该机制的简明描述。从你指出的页面我什至不明白WRITE_BASIC_PACKAGE_VERSION_FILE是否需要添加到MyprojectFoo
  • 你需要将其添加到 Foo
  • 这意味着此解决方案仅适用于我控制下的依赖包?
  • CMake doc of command find_package 建议尽可能使用模块模式。但是WRITE_BASIC_PACKAGE_VERSION_FILE写入的ConfigVersion文件只能在Config模式下读取。

标签: cmake


【解决方案1】:

如果您还编写了FindFoo.cmake 宏,那么您可以在宏中添加如下内容以强制执行版本检查。

if(FOO_FIND_VERSION)
    # Add a version check logic and set FOO_FOUND as true conditionally
else()
    set(FOO_FOUND TRUE)
endif()

更多详情请参考https://cmake.org/cmake/help/latest/manual/cmake-developer.7.html#find-modules

【讨论】:

    猜你喜欢
    • 2022-09-29
    • 2021-04-06
    • 1970-01-01
    • 2015-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-29
    相关资源
    最近更新 更多