CMake,如何知道包含的库版本

时间:2015-12-07 16:51:30

标签: c++ opencv cmake

我对CMake很新,所以也许这个问题有一个非常简单的答案,但我无法在任何地方找到它。

我目前正在开发一个基于CMake文件的c ++项目,并在其他库中使用OpenCV。我的目标是能够使用版本2.4.something和3.0

编译我的代码

为了做到这一点,我想到使用CMake配置的头来设置一个变量,指示在配置阶段找到的opencv包的版本大于或等于3.0。使用此变量,我可以包含或排除我的代码的特殊部分。

但是我无法在任何地方找到我如何在CMake文件中知道已创建的软件包的版本。 我的CMake文件的伪代码看起来像这样:

....
find_package(OpenCV 2.4 REQUIRED)
if(OpenCV_Version >= 3)
    set (OpenCV_3 1)
else
    set (OpenCV_3 0)
endif(OpenCV_Version)
....

是否可以这样做或我做错了什么?

3 个答案:

答案 0 :(得分:4)

来自find_package上的CMake文档:

If the version is acceptable the following variables are set:

<package>_VERSION
    full provided version string
<package>_VERSION_MAJOR
    major version if provided, else 0
<package>_VERSION_MINOR
    minor version if provided, else 0
<package>_VERSION_PATCH
    patch version if provided, else 0
<package>_VERSION_TWEAK
    tweak version if provided, else 0
<package>_VERSION_COUNT
    number of version components, 0 to 4

您可以使用变量OpenCV_VERSION和完整版字符串进行比较,使用VERSION_*命令的if()模式进行比较:

if(OpenCV_VERSION VERSION_LESS "3.0")
    # 2.4 version
else()
    # 3.0 version
endif()

或带有数字比较的版本组件变量:

if(OpenCV_VERSION_MAJOR LESS 3)
    # 2.4 version
else()
    # 3.0 version
endif()

答案 1 :(得分:1)

OpenCV为此提供内置常量:

CV_MAJOR_VERSION

使用此常量,您可以轻松编写依赖于版本的代码。

#if CV_MAJOR_VERSION >= 3
    //OpenCV 3.x code
#else
    //OpenCV 2.4.x code
#endif

答案 2 :(得分:0)

如果您使用的是FindPkgConfig,还可以使用其pkg_search_module命令。

pkg_search_module(<PREFIX> [REQUIRED] [QUIET]
                  [NO_CMAKE_PATH] [NO_CMAKE_ENVIRONMENT_PATH]
                  <MODULE> [<MODULE>]*)

如果找到模块,它将设置一个<package>_VERSION变量。

include(FindPkgConfig)

pkg_search_module(OPENCV    REQUIRED    opencv)

message(STATUS "Got OpenCV ${OPENCV_VERSION}")
if (${OPENCV_VERSION} VERSION_GREATER_EQUAL "3.0.0")
    message(STATUS "Got OpenCV 3+")
else()
    message(STATUS "Got OpenCV <3")
endif()

打印出这样的内容:

-- Checking for one of the modules 'opencv'
-- Got OpenCV 3.2.0
-- Got OpenCV 3+