【问题标题】:Setting up a Vulkan project with CMake on Windows在 Windows 上使用 CMake 设置 Vulkan 项目
【发布时间】:2020-03-17 11:42:32
【问题描述】:

到目前为止,我已经安装了 MinGW、CMake 和 Vulkan SDK。我还根据this answer 下载了 GLFW 预编译的二进制文件、GLM 和 PkgConfig。然后我在 CLion 中创建了一个 CMake 项目。这是 CMakeLists.txt 的内容(我从here 得到的):

cmake_minimum_required(VERSION 3.16)
project(VulkanTest)

set(CMAKE_CXX_STANDARD 17)

add_executable(VulkanTest main.cpp)

find_package(Vulkan REQUIRED)
target_include_directories(${PROJECT_NAME} PUBLIC ${Vulkan_INCLUDE_DIRS})
target_link_libraries(${PROJECT_NAME} Vulkan::Vulkan)

find_package(PkgConfig REQUIRED)
pkg_search_module(GLM REQUIRED glm)
include_directories(${GLM_INCLUDE_DIRS})
target_link_libraries(${PROJECT_NAME} ${GLM_LIBRARY_DIRS})

find_package(glfw3 3.2 REQUIRED)
include_directories(${GLFW_INCLUDE_DIRS})
target_link_libraries(${PROJECT_NAME} ${GLFW_LIBRARIES})

错误信息如下:

CMake Error at CMakeLists.txt:15 (find_package):
    By not providing "Findglfw3.cmake" in CMAKE_MODULE_PATH this project has
    asked CMake to find a package configuration file provided by "glfw3", but
    CMake did not find one.

    Could not find a package configuration file provided by "glfw3" (requested
    version 3.2) with any of the following names:

        glfw3Config.cmake
        glfw3-config.cmake

    Add the installation prefix of "glfw3" to CMAKE_PREFIX_PATH or set
    "glfw3_DIR" to a directory containing one of the above files.  If "glfw3"
    provides a separate development package or SDK, be sure it has been
    installed.

我还尝试将 find_package(glfw3 3.2 REQUIRED) 替换为 pkg_search_module(GLFW REQUIRED glfw3),如 GLFW website 所述,但我收到错误“None of找到所需的'glfw3'”和“没有找到所需的'glm'”。

【问题讨论】:

  • 欢迎来到 Stack Overflow!您是否尝试过消息中的说明?有没有尝试将glfw3的安装目录添加到CMAKE_PREFIX_PATH变量中?
  • @squareskittles 我该怎么做?
  • 您可以在运行时将此变量传递给cmake。请看this的回答。
  • @squareskittles 我添加了 -DCMAKE_INSTALL_PREFIX 和 -DCMAKE_PREFIX_PATH 并将它们指向包含文件的目录,但我收到相同的错误。

标签: c++ cmake vulkan


【解决方案1】:

首先,问题,因为这可能是所有访问该主题的人都感兴趣的问题。帖子中展示的问题似乎与其他人可能想要回答的问题大不相同。

访客回答:在使用 cmake 时,您需要做三件事才能与 Windows 上的 Vulkan 库链接。

set(ENV{VULKAN_SDK} "Path/To/Vulkan/Version/Installation")
find_package(Vulkan REQUIRED)
target_link_libraries(target ${Vulkan_LIBRARIES})

路径应该引用您正在使用的特定版本的 Vulkan。对我来说,这是C:/VulkanSDK/1.2.198.1,但它会根据 Vulkan 的安装位置和您要使用的版本而有所不同。

不要忘记添加一个包含类似于target_include_directories(target PUBLIC "C:/VulkanSDK/1.2.198.1/Include") 的内容的包含目录,以避免在代码中为 Vulkan 标头使用绝对包含路径。

说明find_package 命令将在您的 cmake 安装目录中搜索有关软件包的详细信息。对我来说,这个目录是<cmake_install_dir>/share/cmake-3.18/Modules(3.18 应该替换为您安装的版本。)在这个目录中,您会发现一大堆名为Find<PackageName>.cmakeFindVulkan.cmake 的文件应该在其中。这个文件是 find_package 在后台运行的。您会注意到该文件中有几个 $ENV{VULKAN_SDK} 实例。这就是为什么在调用find_package 之前必须设置VULKAN_SDK 环境变量的原因。如果不是,Cmake 会抛出错误。

lizardsudoku 的问题(即使您可能已经弄清楚了):如上所述,cmake 期望在该 Modules 目录中找到一个 Findglfw3.cmake 条目,但它没有。与其自己创建这些文件之一,不如像这样直接在 CMakeLists.txt 文件中指定 glfw3 库更容易。

list(APPEND CMAKE_PREFIX_PATH "path/to/lib/directory")
find_library(glfw NAMES glfw3 REQUIRED)
target_link_libraries(target ${glfw})

正如有人提到的,您想使用CMAKE_PREFIX_PATH 来指定.lib 所在的目录。然后find_library 调用可以在该目录中搜索glfw3.lib 条目,然后再将其指定为链接器输入。虽然CMAKE_PREFIX_PATH会影响使用find_package时搜索的目录,但包文件不存在,因此错误不会改变。

【讨论】:

    猜你喜欢
    • 2012-04-04
    • 1970-01-01
    • 2011-07-31
    • 2021-09-15
    • 1970-01-01
    • 2020-11-17
    • 2011-08-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多