如何使用 CMake 选择 OpenCL 实现?

How to choose OpenCL implementation with CMake?

我有一个 Windows OpenCL 应用程序,它使用了一些 AMD 扩展。此外,我的应用程序还有一些可选的 CUDA 组件。使用 CMake 构建 visual studio 解决方案时,FindOpenCL 模块选择 Nvidia OpenCL 实现而不是 AMD 的。有没有简单的方法让CMake使用AMD版本?

我尝试在 FindOpenCL 模块代码中注释 Nvidia 部分,但这没有用。我可以修改一些注册表设置吗?我是安装AMD的SDK后安装CUDA的。安装顺序会有所不同吗?

最后,有效的方法是从 find_libraryfind_path 命令中的 PATHS 建议中删除 NVIDIA 环境变量并添加 NO_DEFAULT_PATH。问题是,即使我删除了建议,CMake 仍在添加默认路径,其中包括 NVIDIA 的 OpenCL 实现。这两个命令最终如下所示:

find_path(OpenCL_INCLUDE_DIR
  NAMES
    CL/cl.h OpenCL/cl.h
    NO_DEFAULT_PATH
  PATHS
    ENV "PROGRAMFILES(X86)"
    ENV AMDAPPSDKROOT
    ENV ATISTREAMSDKROOT
  PATH_SUFFIXES
    include
    OpenCL/common/inc
    "AMD APP/include")

 find_library(OpenCL_LIBRARY
      NAMES OpenCL
      NO_DEFAULT_PATH 
      PATHS
        ENV "PROGRAMFILES(X86)"
        ENV AMDAPPSDKROOT
        ENV ATISTREAMSDKROOT
      PATH_SUFFIXES
        "AMD APP/lib/x86_64"
        lib/x86_64
        lib/x64
        OpenCL/common/lib/x64)