如何将Vulkan添加到跨平台CMAKE项目中

How can I add Vulkan to a cross platform CMake project?

本文关键字:跨平台 CMAKE 项目 添加 Vulkan      更新时间:2023-10-16

为了使CMAKE项目变得简单且可移植,我可以考虑将我需要的库的"整个"存储库添加到该项目中。项目结构如下:

MyProject/
└──CMakeLists.txt
└──src/
    └──MyProject/
        └── *.h & *.cpp
        └── CMakeLists.txt
└──ThirdParty/
    └──Vulkan-Hpp/
        └──(Vulkan Files)
    └──glfw/
        └──(glfw Files)
    └──SFML/
        └──(SFML Files)

所有第三方目录都是以下存储库的git子模型:https://github.com/khronosgroup/vulkan-hpp

https://github.com/sfml/sfml

https://github.com/glfw/glfw

总结所有内容,我很难将Vulkan和SFML库集成到项目中。

myproject/cmakelists.txt如下:

cmake_minimum_required (VERSION 3.8 FATAL_ERROR)
project ("MyProject")
set (MyProject_VERSION_MAJOR 0)
set (MyProject_VERSION_MINOR 2)
set (MyProject_VERSION_PATCH 1)
set (CMAKE_CXX_STANDARD 17)
# Include sub-projects.
add_subdirectory ("src/MyProject")
add_subdirectory ("ThirdParty/glfw")
add_subdirectory ("ThirdParty/SFML")
add_subdirectory ("ThirdParty/Vulkan-Hpp")

myproject/src/myproject/cmakelists.txt:

cmake_minimum_required (VERSION 3.8 FATAL_ERROR)
project ("MyProject")
find_package(Vulkan REQUIRED FATAL_ERROR) # error
find_package(SFML REQUIRED network audio) # error
find_package(glfw REQUIRED FATAL_ERROR) # error
# Add source to this project's executable.
add_executable (MyProject "MyProject.cpp")
target_include_directories (MyProject 
    PUBLIC ${GLFW_INCLUDE_DIRS}
    PUBLIC ${SFML_INCLUDE_DIR}
    PUBLIC ${VULKAN_INCLUDE_DIRS}
)
target_link_libraries (MyProject glfw)
target_link_libraries (MyProject ${VULKAN_LIB_LIST})
target_link_libraries (MyProject ${SFML_LIBRARIES})

如何在我的主要项目中使用第三方库来调整CMAKE?项目结构不正确吗?

如果您的find_package(Vulkan REQUIRED FATAL_ERROR)行发生故障,则需要确保正确安装Vulkan SDK,即您具有指向正确位置的Vulkan_SDK环境变量。

此外,请勿嵌入KhronosGroup/Vulkan-Hpp存储库。该存储库用于构建Vulkan C 绑定,但不应直接使用。相反,您应该使用与Vulkan SDK安装捆绑在一起的Vulkan.HPP标头。否则,当人们尝试构建您的项目并拥有与嵌入式KhronosGroup/Vulkan-Hpp

所指的Vulkan SDK的不同版本时

更一般而言,您使用的是find_package,然后后来使用add_subdirectory尝试合并这些外部项目。那不是它的工作方式。find_package将寻找包装的二进制文件,而add_subdirectory并不是为了吞噬整个现有的外部CMAKE项目。

如果您想让项目从源头构建其他项目,则应研究CMAKE外部项目功能的使用。但是,您可能会发现这比价值更负担。或者,为目标平台安装VCPKG,然后使用VCPKG构建和安装GLFW和SFML,然后告诉CMAKE使用VCPKG依赖项(请参阅VCPKG DOCS有关如何将CMAKE_TOOLCHAIN_FILE传递给CMAKE配置线路的VCPKG DOCS。/div>