Rob*_*ero 5 c++ cross-platform repository cmake vulkan
为了使 CMake 项目尽可能简单和便携,我必须考虑将我需要的库的“整个”存储库添加到项目中。项目结构如下:
MyProject/
???CMakeLists.txt
???src/
???MyProject/
??? *.h & *.cpp
??? CMakeLists.txt
???ThirdParty/
???Vulkan-Hpp/
???(Vulkan Files)
???glfw/
???(glfw Files)
???SFML/
???(SFML Files)
Run Code Online (Sandbox Code Playgroud)
所有第三方目录都是以下仓库的git子模块:https : //github.com/KhronosGroup/Vulkan-Hpp
总结一下,我在将 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")
Run Code Online (Sandbox Code Playgroud)
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})
Run Code Online (Sandbox Code Playgroud)
如何调整 CMake 以便在我的主项目中使用第三方库?项目结构不正确?
如果您的find_package(Vulkan REQUIRED FATAL_ERROR)线路出现故障,您需要确保 Vulkan SDK 已正确安装,即您有一个指向正确位置的 VULKAN_SDK 环境变量。
此外,不要嵌入KhronosGroup/Vulkan-Hpp存储库。此存储库用于构建 Vulkan C++ 绑定,但不应直接使用。相反,您应该使用与 Vulkan SDK 安装捆绑在一起的 vulkan.hpp 标头。否则,当人们尝试构建您的项目并安装了与您的嵌入式引用不同的 Vulkan SDK 版本时KhronosGroup/Vulkan-Hpp
更一般地说,您正在使用find_package,然后您add_subdirectory将尝试合并这些外部项目。事情不是这样的。 find_package将寻找包中预先存在的二进制文件,而其add_subdirectory设计目的并不是仅仅吞并整个现有的外部 CMake 项目。
如果您想让您的项目从源代码构建这些其他项目,您应该研究 CMake 的外部项目功能的使用。然而,您可能会发现这是一种负担,而不是其价值。或者,为您的目标平台安装 vcpkg,并使用 vcpkg 构建和安装 glfw 和 sfml,然后告诉 CMake 使用 vcpkg 依赖项(请参阅 vcpkg 文档,了解如何将 CMAKE_TOOLCHAIN_FILE 传递到 cmake 配置行。
| 归档时间: |
|
| 查看次数: |
7744 次 |
| 最近记录: |