Vulkan HPP 与 cmake

问题描述 投票:0回答:2

我正在尝试使用 cmake 和 fetch_content 包含 vulkan hpp 库(我想自动化此操作,并且我不希望用户手动安装 vulkan,如果这是错误的方法,请告诉我,因为我刚刚开始使用 cmake )如下面的代码片段所示

include(FetchContent)

FetchContent_Declare(
        vulkanhpp
        GIT_REPOSITORY https://github.com/KhronosGroup/Vulkan-Hpp.git
        GIT_TAG b97783be3ed973f4e0d96fc7c680920f5ab0aa3a #1.2.191
)

FetchContent_GetProperties(vulkanhpp)
if ( NOT vulkanhpp_POPULATED )
    message ( STATUS "Fetching vulkanhpp" )
    FetchContent_Populate(vulkanhpp)

    set ( SAMPLES_BUILD OFF CACHE INTERNAL "Build the vulkan hpp samples" )
    set ( VULKAN_HPP_INSTALL OFF CACHE INTERNAL "Install vulkan hpp" )

    add_subdirectory ( ${vulkanhpp_SOURCE_DIR} ${vulkanhpp_BINARY_DIR} )
endif ()

现在我的问题是,当我放入cpp文件时,我不知道如何在我的main.cpp文件中包含“include”文件夹:

#include "vulkan/vulkan.hpp"

没有将完整路径放入 CMakeLists.txt 中,而是使用一些 CMake 变量

我的其他cmake列表如下

include_directories ( "" ) ### what should I put here for include vulkan hpp library ###

# Add source to this project's executable.
add_executable ( example "main.cpp" )

这是自动管理 vulkan hpp 依赖项的正确方法吗?不使用find_package还有其他选择吗?

c++ cmake vulkan
2个回答
0
投票

您指定的存储库实际上并不包含 Vulkan 标头。使用 this 代替。它提供了一个

CMakeLists.txt
文件,它将标头添加到名为
Vulkan::Headers
的库中,因此您只需添加子目录,然后使用
target_link_libraries(example PRIVATE Vulkan::Headers)
链接到它们。 但你为什么要这样做呢?要使用 Vulkan,您必须安装 Vulkan SDK(实际的库),并且 SDK 还包含标头。


0
投票

为了编译,Vulkan C++ 头文件(Vulkan HPP)需要包含 Vulkan C 头文件(Vulkan Headers)。这是一个使用 GLAD 和 GLFW 完善完整 vulkan 堆栈的示例。

include(FetchContent)
# Declare required Vulkan version
set(VULKAN_VER_MAJOR 1)
set(VULKAN_VER_MINOR 3)
set(VULKAN_VER_PATCH 278)
set(VULKAN_VERSION ${VULKAN_VER_MAJOR}.${VULKAN_VER_MINOR}.${VULKAN_VER_PATCH})

# Declare GLAD version
set(GLAD_VERSION 2.0.5)

# Declare GLFW3 version
set(GLFW3_VERSION 3.4)

#-------------------------------------------------------------------------
# Fetch GLAD
# ------------------------------------------------------------------------
message(STATUS "Include GLAD")
FetchContent_Declare(
        libglad
        GIT_REPOSITORY https://github.com/Dav1dde/glad.git
        GIT_TAG v${GLAD_VERSION}
)

FetchContent_GetProperties(libglad)
FetchContent_Populate(libglad)
set(GLAD_SOURCES_DIR ${libglad_SOURCE_DIR})
add_subdirectory(${libglad_SOURCE_DIR}/cmake ${CMAKE_CURRENT_BINARY_DIR}/cmake)
glad_add_library(glad_vulkan SHARED REPRODUCIBLE LOADER API gl:core=4.6 vulkan=${VULKAN_VER_MAJOR}.${VULKAN_VER_MINOR})

#-------------------------------------------------------------------------
# Fetch GLFW3
# ------------------------------------------------------------------------
message(STATUS "Include GLFW3")
FetchContent_Declare(
        libglfw
        GIT_REPOSITORY https://github.com/glfw/glfw.git
        GIT_TAG ${GLFW3_VERSION}
        GIT_SHALLOW TRUE
        GIT_PROGRESS TRUE
)

set(GLFW_INSTALL OFF)
set(BUILD_SHARED_LIBS ON)
set(GLFW_BUILD_DOCS OFF)
set(GLFW_BUILD_COCOA OFF)
set(GLFW_BUILD_WAYLAND OFF)
FetchContent_MakeAvailable(libglfw)

#-------------------------------------------------------------------------
# Fetch Vulkan C Headers
# ------------------------------------------------------------------------
message(STATUS "Include Vulkan C Headers")
FetchContent_Declare(
        vulkanheaders
        GIT_REPOSITORY https://github.com/KhronosGroup/Vulkan-Headers.git
        GIT_TAG v${VULKAN_VERSION}
        GIT_SHALLOW TRUE
        GIT_PROGRESS TRUE
)
set(PROJECT_IS_TOP_LEVEL OFF)
FetchContent_MakeAvailable(vulkanheaders) # vulkanheaders has a proper CMakeLists

#-------------------------------------------------------------------------
# Fetch Vulkan C++ Headers
#-------------------------------------------------------------------------
message(STATUS "Include Vulkan C++ Headers")
FetchContent_Declare(
    vulkanhpp
    GIT_REPOSITORY https://github.com/KhronosGroup/Vulkan-Hpp.git
    GIT_TAG v${VULKAN_VERSION}
    GIT_SHALLOW TRUE
    GIT_PROGRESS TRUE
)
# vulkanhpp does not have a proper CMakeLists
FetchContent_GetProperties(vulkanhpp)
FetchContent_Populate(vulkanhpp)

# Define a library for Vulkan
add_library(vulkan INTERFACE)
target_include_directories(vulkan INTERFACE ${vulkanhpp_SOURCE_DIR})
target_link_libraries(vulkan INTERFACE Vulkan::Headers glfw glad_vulkan)

然后您只需将

vulkan
链接到您自己的库或可执行文件即可。

© www.soinside.com 2019 - 2024. All rights reserved.