VulkanSDK 使用 CMake 获取库

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

我目前正在尝试将 vulkan 链接到我在 CMake 中的项目。我想使用 CMake 下载 VulkanSDK,除了 CMake 之外不依赖任何其他东西。

我尝试使用FetchContent,但它只下载VulkanSDK的头文件。 我尝试使用ExternalProject,但不知怎的,它与FetchContent做同样的事情。

我什至没有开始实现下载 dxcompilerd、glslangd、shaderc_combinedd、spirv-cross-cored 等的脚本。

外部项目测试

include(FetchContent)
include(ExternalProject)

set(VULKAN_VER_MAJOR 1)
set(VULKAN_VER_MINOR 3)
set(VULKAN_VER_PATCH 275)

set(VULKAN_VERSION ${VULKAN_VER_MAJOR}.${VULKAN_VER_MINOR}.${VULKAN_VER_PATCH})

ExternalProject_Add(
    vulkan
    PREFIX Vulkan
    GIT_REPOSITORY https://github.com/KhronosGroup/Vulkan-Headers.git
    GIT_TAG v${VULKAN_VERSION}
    CONFIGURE_COMMAND ""
    BUILD_COMMAND ""
    INSTALL_COMMAND ""
    LOG_DOWNLOAD ON
)

ExternalProject_Get_Property(vulkan SOURCE_DIR)
include_directories(${SOURCE_DIR}/include)

add_library(Vulkan INTERFACE)
add_dependencies(Vulkan vulkan)

# Add source to this project's executable.
add_executable (VulkanTest "VulkanTest.cpp" "VulkanTest.h")

target_link_libraries(VulkanTest Vulkan)

if (CMAKE_VERSION VERSION_GREATER 3.12)
  set_property(TARGET VulkanTest PROPERTY CXX_STANDARD 20)
endif()

测试 FetchContent

include(FetchContent)

set(VULKAN_VER_MAJOR 1)
set(VULKAN_VER_MINOR 3)
set(VULKAN_VER_PATCH 275)

set(VULKAN_VERSION ${VULKAN_VER_MAJOR}.${VULKAN_VER_MINOR}.${VULKAN_VER_PATCH})

FetchContent_Declare(
    vulkanheaders
    GIT_REPOSITORY https://github.com/KhronosGroup/Vulkan-Headers.git
    GIT_TAG v${VULKAN_VERSION}
    GIT_SHALLOW TRUE
    GIT_PROGRESS TRUE
)

FetchContent_Declare(
    vulkanloader
    GIT_REPOSITORY https://github.com/KhronosGroup/Vulkan-Loader.git
    GIT_TAG v${VULKAN_VERSION}
    GIT_SHALLOW TRUE
    GIT_PROGRESS TRUE
)

FetchContent_Declare(
    vulkanvalidation
    GIT_REPOSITORY https://github.com/KhronosGroup/Vulkan-ValidationLayers.git
    GIT_TAG v${VULKAN_VERSION}
    GIT_SHALLOW TRUE
    GIT_PROGRESS TRUE
)

FetchContent_Declare(
    vulkantools
    GIT_REPOSITORY https://github.com/KhronosGroup/Vulkan-Tools.git
    GIT_TAG v${VULKAN_VERSION}
    GIT_SHALLOW TRUE
    GIT_PROGRESS TRUE
)

set(PROJECT_IS_TOP_LEVEL OFF)
FetchContent_MakeAvailable(vulkanheaders)
FetchContent_MakeAvailable(vulkanloader)
FetchContent_MakeAvailable(vulkanvalidation)
FetchContent_MakeAvailable(vulkantools)

add_library(myvulkan INTERFACE IMPORTED)
target_include_directories(myvulkan INTERFACE ${vulkan_headers_SOURCE_DIR}/include
    ${vulkan_loader_SOURCE_DIR}/loader
    ${vulkan_validation_layers_SOURCE_DIR}/layers
    ${vulkan_tools_SOURCE_DIR}/vulkaninfo)
target_link_libraries(myvulkan INTERFACE Vulkan::Vulkan)
target_link_libraries(myvulkan INTERFACE 
    Vulkan::Loader
    Vulkan::ValidationLayers
)

# Add source to this project's executable.
add_executable (VulkanTest "VulkanTest.cpp" "VulkanTest.h")

target_link_libraries(VulkanTest PRIVATE myvulkan)

if (CMAKE_VERSION VERSION_GREATER 3.12)
  set_property(TARGET VulkanTest PROPERTY CXX_STANDARD 20)
endif()

我应该怎样做才能让 vulkan sdk 为我的项目做好准备,而不依赖于手动下载?

cmake vulkan external-project fetchcontent
1个回答
0
投票

Khronos 官方 Vulkan 示例存储库 已构建,无需您下载 SDK。

它通过包含一堆其他存储库作为 Git 子模块来实现这一点,但您可以使用

FetchContent
完成同样的事情。

但是,如果您想要更详细的答案,则需要更明确地说明哪些内容不起作用。

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