cmake_minimum_required(VERSION 3.20) project(HelloVulkan CXX) set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) set(CMAKE_BINARY_DIR ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}) # 第三方库 add_subdirectory(Lib/glfw) add_subdirectory(Lib/glm) add_subdirectory(Lib/spdlog) add_subdirectory(Lib/stb) # ---- Assimp(vendored submodule,模型导入;只编译需要的 importer) ---- set(BUILD_SHARED_LIBS OFF) # 静态链接 set(ASSIMP_BUILD_TESTS OFF CACHE BOOL "" FORCE) set(ASSIMP_BUILD_ASSIMP_TOOLS OFF CACHE BOOL "" FORCE) # 不编 assimp_cmd 等工具 set(ASSIMP_INSTALL OFF CACHE BOOL "" FORCE) set(ASSIMP_WARNINGS_AS_ERRORS OFF CACHE BOOL "" FORCE) # assimp 源码警告多 set(ASSIMP_INJECT_DEBUG_POSTFIX OFF CACHE BOOL "" FORCE) set(ASSIMP_NO_EXPORT ON CACHE BOOL "" FORCE) # 彻底移除导出代码 set(ASSIMP_BUILD_ALL_IMPORTERS_BY_DEFAULT OFF CACHE BOOL "" FORCE) # 全关,按需开 set(ASSIMP_BUILD_DRACO OFF CACHE BOOL "" FORCE) # 用 assimp 自带 contrib zlib(而非系统 zlib)。原因:系统 zlib 会使 assimp 走 # pkg-config 找系统 minizip,而 Arch 的 minizip 头文件在 /usr/include/minizip/ # 子目录,与 assimp 的 #include 不符 → ZipArchiveIOSystem 编译失败。 # 自带 zlib 后 ASSIMP_BUILD_MINIZIP=1,跳过 pkg-config,直接用 contrib/unzip。 set(ASSIMP_BUILD_ZLIB ON CACHE BOOL "" FORCE) # 清除首次 configure 残留的 UNZIP_FOUND 缓存(INTERNAL=1 会持续生效, # 使 assimp 误判系统 minizip 可用而不把 contrib/unzip 加进 include 路径)。 set(UNZIP_FOUND OFF CACHE INTERNAL "" FORCE) # 需要的导入格式(按需增减,每关一个省编译时间): set(ASSIMP_BUILD_OBJ_IMPORTER ON CACHE BOOL "" FORCE) set(ASSIMP_BUILD_GLTF_IMPORTER ON CACHE BOOL "" FORCE) # glTF1+2 同一选项 set(ASSIMP_BUILD_FBX_IMPORTER ON CACHE BOOL "" FORCE) set(ASSIMP_BUILD_STL_IMPORTER ON CACHE BOOL "" FORCE) set(ASSIMP_BUILD_PLY_IMPORTER ON CACHE BOOL "" FORCE) add_subdirectory(Lib/assimp) # Vulkan find_package(Vulkan REQUIRED) # Engine 和 App add_subdirectory(Engine) add_subdirectory(App) file(GLOB ASSETS "assets") file(COPY ${ASSETS} DESTINATION ${CMAKE_BINARY_DIR})