首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建CMake XXConfig.cmake让其他cmake项目调用

创建CMake XXConfig.cmake让其他cmake项目调用
EN

Stack Overflow用户
提问于 2019-08-27 18:30:23
回答 1查看 233关注 0票数 1

我从KhronosGroup下载opencl,并把它构建得很好。

但它没有OpenCLConfig.cmake。

所以我决定创建一个我的程序(CMakeLists.txt)可以使用CMakeLists.txt来调用它。

下面的文件树是我的OpenCL目录。在我建好之后。

代码语言:javascript
复制
# $PWD is C:/SDKs/ocl-icd

|-- OpenCLConfig.cmake
|-- bin
|   `-- OpenCL.dll
|-- include
|   `-- CL
        ... CL Headers
`-- lib
    |-- OpenCL.exp
    `-- OpenCL.lib

我创建了OpenCLConfig.cmake,内容如下:

代码语言:javascript
复制
set(OpenCL_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)
set(OpenCL_INCLUDE_DIR "${OpenCL_DIR}/include")
set(OpenCL_LIBRARIES "OpenCL")

我在其他人中使用find_package(OpenCL) CMakeLists.txt

代码语言:javascript
复制
...
set(OpenCL_DIR "C:/SDKs/ocl-icd" CACHE PATH "OpenCL Root DIR")
find_package(OpenCL 2 REQUIRED) 
include_directories (${OpenCL_INCLUDE_DIR})
add_executable (${PROJECT_NAME} test.cc)
target_link_libraries(${OpenCL_LIBRARIES})
...

当我使用cmake-gui来配置它时,我得到了错误报告。

代码语言:javascript
复制
CMake Error at C:/Program Files/CMake/share/cmake-3.15/Modules/FindPackageHandleStandardArgs.cmake:137 (message):
  Could NOT find OpenCL (missing: OpenCL_INCLUDE_DIR) (Required is at least
  version "2")
Call Stack (most recent call first):
  C:/Program Files/CMake/share/cmake-3.15/Modules/FindPackageHandleStandardArgs.cmake:378 (_FPHSA_FAILURE_MESSAGE)
  C:/Program Files/CMake/share/cmake-3.15/Modules/FindOpenCL.cmake:150 (find_package_handle_standard_args)
  CMakeLists.txt:10 (find_package)

我认为这是由OpenCLConfig.cmake.引起的错误

我该怎么解决呢?

更新:添加OpenCLConfigVersion.cmake

代码语言:javascript
复制
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)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-28 11:07:42

错误消息说,错误是由CMake附带的脚本发出的:

代码语言:javascript
复制
C:/Program Files/CMake/share/cmake-3.15/Modules/FindOpenCL.cmake

您的脚本(OpenCLConfig.cmake)被忽略了

问题是,当find_package()搜索脚本以处理请求时,FindXXX.cmake脚本是搜索的第一个。只有当没有这样的脚本时,XXXConfig.cmake脚本才会被搜索。

通过向FindXXX.cmake调用添加CONFIGNO_MODULE选项,可以禁用对find_package脚本的搜索:

代码语言:javascript
复制
find_package(OpenCL 2 REQUIRED CONFIG)

对于某些包(例如,Boost),如果存在FindXXX.cmake脚本,则它们的XXXConfig.cmake脚本试图将其工作“利用”到XXXConfig.cmake脚本中。但是其他包(如您使用的OpenCL )不会这样做。我不知道在这方面有什么协议。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57680420

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档