【发布时间】:2018-02-14 00:29:49
【问题描述】:
我正在为我的一个项目设置 GLFW 和 Vulkan。对于 Vulkan,我使用 MoltenVk 来获取 Vulkan compat 和 GLFW 来创建窗口。我使用的IDE是CLion,使用的是CMake系统。
从一些 github 问题来看,似乎支持这种设置,但没有人提到它是如何完成的。
GLFW 是通过 homebrew 和 MoltenVK 手动安装的,方法是将 MoltenVK 和 vulkan 文件夹添加到 usr/local/include 并将 MacOS 文件夹的内容添加到 usr/local/lib (尽管我很确定 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/)
在这一点上,我不知道为什么事情没有正确链接,因此感谢您的帮助。
【问题讨论】:
-
要找到您的 FindVulkan.cmake,您需要设置 CMAKE_MODULE_PATH 以包含
cmake/modules/。您的 CMakeList.txt 中有该行,但它已被注释掉,因此您必须取消注释。 -
另外,你确定
find_package(glfw3)设置了glfw3_FOUND变量而不是GLFW3_FOUND一个吗?这取决于您拥有的查找脚本,并且此类脚本通常会记录它们设置的变量。 -
@Tsyvarev 我没有在任何地方明确指定脚本,并且根据您所说的更改,我确实让脚本通过 GLFW3_FOUND 语句(使用 MESSAGE 命令测试)。奇怪的是,它仍然说 _glfwInit 是一个未定义的符号。
-
@Eelke 我禁用了它,但没有找到 Vulkan,因为如果我将 REQUIRED 参数添加到 find_package(Vulkan) 它会出错。你知道我应该如何为 MoltenVK 准备库以正确获取吗?
-
由于脚本设置
GLFW3_FOUND变量,它可能设置GLFW3_LIBRARIES等等(前缀为大写)。所以你也需要更新你的其他命令。
标签: c++ macos cmake glfw vulkan