[英]GLFW + Vulkan on OSX
我正在为我的一个项目设置GLFW和Vulkan。 对于Vulkan,我正在使用MoltenVk来获取Vulkan compat和GLFW以进行窗口创建。 我正在使用的IDE是CLion,它使用CMake系统。
从某些github问题来看,似乎对这种设置有支持,但是没有人提及它是如何完成的。
通过将MoltenVK和vulkan文件夹添加到usr / local / include并将MacOS文件夹的内容添加到usr / local / lib,可以通过homebrew和MoltenVK手动安装GLFW(尽管我非常确定MoltenVK.framework应该不存在)。
此时,Clion可以看到GLFW和Vulkan标头,但是我仍然需要正确地链接它们。
现在,完整的CMakeLists.txt文件是这样的:
cmake_minimum_required(VERSION 3.8)
project(VulkanEngine)
#set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} “${CMAKE_SOURCE_DIR}/cmake/Modules”)
set(CMAKE_CXX_STANDARD 17)
set(SOURCE_FILES src/main.cpp)
add_executable(VulkanEngine ${SOURCE_FILES})
#Finding and linking GLFW3
find_package(glfw3 3.2 REQUIRED)
if (glfw3_FOUND)
include_directories(${glfw3_INCLUDE_DIRS})
target_link_libraries (VulkanEngine ${glfw3_LIBRARIES})
endif (glfw3_FOUND)
#Finding and linking Vulkan
find_package (Vulkan)
if (Vulkan_FOUND)
include_directories(${Vulkan_INCLUDE_DIRS})
target_link_libraries (VulkanEngine ${Vulkan_LIBRARIES})
endif (Vulkan_FOUND)
当cmake项目已重新加载时,控制台会告诉以下内容:
-- Could NOT find Vulkan (missing: Vulkan_LIBRARY)
-- Configuring done
-- Generating done
-- Build files have been written to: /Users/mtesseract/dev/cpp/VulkanEngine/cmake-build-debug
对我来说,这表明已找到并链接了GLFW,但是当我尝试为GLFW构建“ hello world”时,收到以下消息:
Undefined symbols for architecture x86_64:
"_glfwInit", referenced from:
_main in main.cpp.o
我从GLFW github页面https://git.io/v5ggN获得了FindVulkan.cmake,因为它支持MoltenVK,但我不确定CMake是否会完全使用它。 (我将文件放在(projectroot)/ cmake / modules /中)
在这一点上,我对为什么事物无法正确链接的想法一无所知,因此请多多帮助。
我找到了至少在某种程度上似乎可行的解决方案。 在这一点上,我要解决另一个问题(GLFW似乎并没有考虑到MoltenVK的存在)。
到目前为止的过程如下(可以在我的github页面(github.com/mtesseracttech/VulkanEngine)上找到):
Vulkan + GLFW + GLM Setup Process with CMake and Package Managers
Windows:
Preparation:
Create CLion Application Project
Install MSYS2 (Cygwin-like package manager that includes a windows port of Arch's PacMan)
Install LunarG VK SDK
Download FindVulkan.cmake from GFLW's Github (it includes a path for MoltenVK(for OSX Later)) and put it in (proj_root/cmake/modules)
MSYS2 Commands:
$ pacman -Su //Updates pacman
$ pacman -Ss {packageName} //Is used for searching for exact package names
Installed Packages through msys2:
$ pacman -S mingw-w64-x86_64-toolchain //Installs the CLion toolchain that includes CMake, Make, GCC, etc.
$ pacman -S mingw-w64-x86_64-glfw //Installs GLFW
$ pacman -S mingw-w64-x86_64-glm //Installs GLM
$ pacman -S mingw-w64-x86_64-vulkan //Vulkan can also be installed through this method, but I went with LunarG
Enter the following in the CMakeLists.txt file in the root of the project:
######################################################################################
cmake_minimum_required(VERSION 3.8)
project(VulkanEngine)
set(CMAKE_CXX_STANDARD 17)
set(SOURCE_FILES src/main.cpp)
add_executable(VulkanEngine ${SOURCE_FILES})
#Setting up PkgConfig
find_package(PkgConfig REQUIRED)
#Finding and linking GLFW3
pkg_search_module(GLFW3 3.2 REQUIRED glfw3)
if(GLFW3_FOUND)
message(STATUS "Found GLFW, Including and Linking now")
include_directories(${GLFW3_INCLUDE_DIRS})
target_link_libraries(VulkanEngine ${GLFW3_STATIC_LIBRARIES})
endif(GLFW3_FOUND)
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/modules/")
#Finding and linking Vulkan
find_package (Vulkan)
if (VULKAN_FOUND)
message(STATUS "Found Vulkan, Including and Linking now")
include_directories(${VULKAN_INCLUDE_DIR})
target_link_libraries (VulkanEngine ${VULKAN_LIBRARY})
endif (VULKAN_FOUND)
######################################################################################
OSX:
Preparation
Create CLion Application Project
Install HomeBrew (package manager)
Download MoltenVK
Download FindVulkan.cmake from GFLW's Github (it includes a path for MoltenVK(for OSX Later)) and put it in (proj_root/cmake/modules)
Homebrew:
brew update //Updates homebrew
brew install glfw //Installs GLFW
brew install glm //Installs GLM
MoltenVK:
Place MoltenVK/macOS's contents into /usr/local/lib
Place MoltenVK/macOS/MoltenVK.framework/headers's contents into /usr/local/inc/MoltenVK
CMake:
Same as on windows, but in the FindVulkan.cmake file, add at the very end of the elseif(APPLE) block the line:
set(VULKAN_INCLUDE_DIR "/usr/local/include/MoltenVK")
This is not a pretty or flexible solution, but for now it will do.
我很确定这个解决方案不是理想的,因为GLFW不会采用这种策略来支持MoltenVK,但是至少可以编译,所以我认为这是进步。
似乎您的问题是您尚未定义VULKAN_SDK
变量。 确保将其指向SDK内的/ lib和/ include的父文件夹,并且FindVulkan应该可以工作
VULKAN_SDK=/opt/vulkan/x86_64 cmake.
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.