我对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)
....
是否可以这样做或我做错了什么?
答案 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为此提供内置常量:
使用此常量,您可以轻松编写依赖于版本的代码。
#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+