使用 CMake 配置 glfw, glm 的時候,總是提示鏈接失敗,找不到 vkEnumerateInstanceExtensionProperties 符號
cmake_minimum_required(VERSION 3.4...3.27)if(${CMAKE_VERSION} VERSION_LESS 3.27)cmake_policy(VERSION ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION})
else()cmake_policy(VERSION 3.27)
endif()project(VulkanTest VERSION 1.0DESCRIPTION "Learning Vulkan"LANGUAGES CXX)# ---- Include guards ----
if(PROJECT_SOURCE_DIR STREQUAL PROJECT_BINARY_DIR)
message(FATAL_ERROR"In-source builds not allowed. Please make a new directory (called a build directory) and run CMake from there."
)
endif()set(CMAKE_BINARY_DIR ${CMAKE_SOURCE_DIR}/bin)
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)
set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib)add_executable(VulkanTest src/test.cpp src/test.h)# vulkan sdktarget_include_directories(VulkanTest PUBLIC $ENV{VULKAN_SDK}/Include)
target_link_libraries(VulkanTest $ENV{VULKAN_SDK}/Lib)# link glfw with cmake guide:
# https://www.glfw.org/docs/3.3/build_guide.html# don't compile exampleset(GLFW_BUILD_DOCS OFF CACHE BOOL "" FORCE)
set(GLFW_BUILD_TESTS OFF CACHE BOOL "" FORCE)
set(GLFW_BUILD_EXAMPLES OFF CACHE BOOL "" FORCE)add_subdirectory(dependencies/glfw)target_include_directories(VulkanTest PUBLIC dependencies/glfw/include)
target_link_libraries(VulkanTest glfw)# glmadd_subdirectory(dependencies/glm)target_include_directories(VulkanTest PUBLIC dependencies/glm)
target_link_libraries(VulkanTest glm)
這很明顯就是鏈接不到 Vulkan SDK 的庫,但是我覺得我這么寫應該沒有問題
我還以為是要把 Vulkan SDK 的 lib 文件復制到 exe 目錄底下什么的,我還在想要不要用 install
之后我看別人的倉庫,別人都沒有用 install,于是我再仔細看,最后發現別人不是 link 到文件夾,而是 link 到一個 lib 文件,所以我應該這么寫:target_link_libraries(VulkanTest $ENV{VULKAN_SDK}/Lib/vulkan-1.lib)
,然后就好了
本來我 link 到一個文件夾的時候,cmake 在控制臺輸出那里也提示了,會忽略掉這一行……果然是因為我不能 link 到一個文件夾