CMake:如何在配置文件中实施版本检查? [英] CMake: How to implement version check in a config file?

查看:543
本文介绍了CMake:如何在配置文件中实施版本检查?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我为opencl-icd自定义CMake软件包配置文件 OpenCLConfig.cmake .

I Customize CMake package configure file OpenCLConfig.cmake for opencl-icd.

请参考创建CMake XXConfig. cmake让其他cmake项目调用

现在,我遇到一个问题:如何在配置文件中实施版本检查.

Now, I encounter a problem: How to implement version check in a config file.

我在 OpenCLConfig.cmake 旁边创建 OpenCLConfigVersion.cmake ,内容为:

I create OpenCLConfigVersion.cmake beside OpenCLConfig.cmake, which content is:

#OpenCLConfigVersion.cmake

set(OpenCL_VERSION 2.2)
set(OpenCL_VERSION_MAJOR 2)
set(OpenCL_VERSION_MINOR 2)
SET(OpenCV_VERSION_PATCH 0)
SET(OpenCV_VERSION_TWEAK 0)

虽然我在其他CMakeLists.txt中将它称为opencl-icd,

While I invoke it opencl-icd in others CMakeLists.txt,

find_package(OpenCL config)

我收到此错误:

CMake Error at CMakeLists.txt:10 (find_package): Could not find a 
configuration file for package "OpenCL" that is compatible with requested 
version "2". The following configuration files were considered but not 
accepted: C:/SDKs/ocl-icd/OpenCLConfig.cmake, version: unknown 

我在CMakeLists.txt中将OpenCL_DIR设置为"C:/SDKs/ocl-icd".

I have set OpenCL_DIR as "C:/SDKs/ocl-icd" in my CMakeLists.txt.

我自定义的 OpenCLConfig.cmake 的内容是

set(OpenCL_FOUND TRUE)
set(OpenCL_ROOT_DIR "C:/SDKs/ocl-icd")

set(OpenCL_VERSION 2.2)
set(OpenCL_VERSION_MAJOR 2)
set(OpenCL_VERSION_MINOR 2)
SET(OpenCV_VERSION_PATCH 0)
SET(OpenCV_VERSION_TWEAK 0)

find_path(OpenCL_INCLUDE_DIR NAMES CL/cl.h PATHS "${OpenCL_ROOT_DIR}/include")
set(OpenCL_INCLUDE_DIRS "${OpenCL_INCLUDE_DIR}")
find_library(OpenCL_LIBRARY NAMES OpenCL.lib PATHS "${OpenCL_ROOT_DIR}/lib") 
set(OpenCL_LIBRARIES ${OpenCL_LIBRARY})

如何处理版本问题.

推荐答案

我已经解决了.

我指的是 OpenCVConfig-version.cmake ,写我的 OpenCLConfigVersion.cmake

#OpenCLConfigVersion.cmake

set(OpenCL_VERSION 2.2)
set(PACKAGE_VERSION ${OpenCL_VERSION})

set(PACKAGE_VERSION_EXACT False)
set(PACKAGE_VERSION_COMPATIBLE False)

if(PACKAGE_FIND_VERSION VERSION_EQUAL PACKAGE_VERSION)
  set(PACKAGE_VERSION_EXACT True)
  set(PACKAGE_VERSION_COMPATIBLE True)
endif()

if(PACKAGE_FIND_VERSION_MAJOR EQUAL 2
   AND PACKAGE_FIND_VERSION VERSION_LESS PACKAGE_VERSION)
  set(PACKAGE_VERSION_COMPATIBLE True)
endif()

修改后可以正常工作.

这篇关于CMake:如何在配置文件中实施版本检查?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆