为什么 VULKAN_LIBRARY 设置为 VULKAN_LIBRARY-NOTFOUND 而 VULKAN_FOUND 是 TRUE?

Why is VULKAN_LIBRARY set to VULKAN_LIBRARY-NOTFOUND yet VULKAN_FOUND is TRUE?

我有兴趣亲自试用 Vulkan,但我很难让 CMake 可靠地 link 使用它。我决定使用 CMake 的 FindVulkan module... 或至少我认为它应该如何工作。这是我的做法:

# Hey CMake. Look for Vulkan.
find_package(Vulkan REQUIRED)

# Alright, no errors? Tell me what you found!
message("Vulkan found? " ${VULKAN_FOUND})
message("Alright, where is it? " ${VULKAN_LIBRARY})
message("And I can include it? " ${VULKAN_INCLUDE_DIR})

稍后在文件中:

# Let's make a library and link vulkan
include_directories(${VULKAN_INCLUDE_DIR})
add_library(myLib myLib.cpp myLib.h)
target_link_libraries(myLib ${VULKAN_LIBRARY})

所以,我得到了我的结果!首先,我的 CMake 输出:

Vulkan found? TRUE
Alright, where is it? VULKAN_LIBRARY-NOTFOUND
And I can include it? C:/VulkanSDK/1.0.65.1/Include
-- Could NOT find Vulkan (missing: VULKAN_LIBRARY)
-- Could NOT find Doxygen (missing: DOXYGEN_EXECUTABLE)
-- Using Win32 for window creation
CMake Error: The following variables are used in this project, but they are set to NOTFOUND.
Please set them or make sure they are set and tested correctly in the CMake files:
VULKAN_LIBRARY (ADVANCED)
    linked by target "TOVE" in directory C:/Users/User/Desktop/TOVE

奇怪,看起来你找到了我的包含目录,但是你找不到我的库。中间的消息实际上是 GLFW。我把它们放在里面,以防万一它们意味着更多。最后,CMake 因错误而停止。

一些额外的测试表明 ${VULKAN_LIBRARIES}${VULKAN_INCLUDE_DIRS} 都是空白的。正如预期的那样,将它们与它们的单一对应物交换会使 Visual Studio 2017 年对我的 vulkan/vulkan.h 包括感到困惑。

我在互联网上找不到任何人获得 VULKAN_LIBRARY-NOTFOUND 的案例,但可能有其他图书馆也有类似的问题。为什么我在这里只找到一半的信息?这是 Vulkan 还是 CMake 的问题,还是我真的不擅长用 CMake 编写代码。我是 CMake 的新手,我只是在试验它,所以如果只是我滥用了一些重要的功能或这些行中的某些内容,我深表歉意。

我在 Windows 上尝试编译 GLFW 3.2.1 时遇到了同样的错误。问题是 GLFW CMakeLists 在“${GLFW_SOURCE_DIR}/CMake/modules”中使用了自己的 FindVulkan.cmake,这似乎有点过时了。

从 CMake 发行版 (3.10) 中的 FindVulkan.cmake 中获取一些代码来修改 GLFW 文件按预期工作并且 VULKAN_LIBRARY 缓存变量填充了 .lib 文件的路径。