如何将Vulkan添加到跨平台CMAKE项目中
How can I add Vulkan to a cross platform CMake project?
为了使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
更一般而言,您使用的是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>
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- CMake-按正确顺序将项目与C运行时对象文件链接
- 使用CMake创建QML插件
- cmake如何在fedora工作站中找到boost静态库包
- 使用CMake检测支持的C++标准
- CMake项目Boost库错误:Boost/config/compiler/gcc.hpp:165:10:致命错误:cs
- 如何使用CMake编译.proto文件来生成.grpcp.pb.cc和.grpc.pb.h文件
- cmake在我的项目中所需的所有静态库都不成功
- 在CMakeLists.txt的安装功能中使用.cmake文件有什么用
- 无法链接 CMake 中的本地库
- libssh 的函数在构建 libssh 时无法在 Qt 和 cmake 错误中找到
- 如何将外部依赖引入跨平台CMake项目?
- 使特定于Unix的CMake过程跨平台
- 使用 CMake 在跨平台项目中C++包含 Boost 库
- 如何将Vulkan添加到跨平台CMAKE项目中
- 使用 CMake 外部项目为跨平台库依赖项的目标名称
- Visual Studio Linux跨平台的Cmake Generator
- 有没有一种很好的跨平台方法可以使用CMake包含外部C++库
- 如何以跨平台的方式自动下载c++依赖项+ CMake