cmake_minimum_required(VERSION 3.22.1) project("sample") set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF) if(MSVC) add_compile_options(/Zc:__cplusplus) endif() if(CMAKE_SYSTEM_NAME STREQUAL "Android") message(STATUS "Building for Android") include_directories( vulkan ${CMAKE_CURRENT_LIST_DIR}/vulkan ${CMAKE_CURRENT_LIST_DIR}/vulkan/framework ${CMAKE_CURRENT_LIST_DIR}/vulkan/components ${CMAKE_CURRENT_LIST_DIR}/vulkan/components/core ${CMAKE_CURRENT_LIST_DIR}/vulkan/components/core/include ${CMAKE_CURRENT_LIST_DIR}/third_party ${CMAKE_CURRENT_LIST_DIR}/third_party/vma ${CMAKE_CURRENT_LIST_DIR}/third_party/vma/include ${CMAKE_CURRENT_LIST_DIR}/third_party/volk ${CMAKE_CURRENT_LIST_DIR}/third_party/fmt ${CMAKE_CURRENT_LIST_DIR}/third_party/fmt/include ) add_library(sample SHARED app/src/main/cpp/main.cpp app/src/main/cpp/AndroidOut.cpp vulkan/AppBase.h vulkan/AppBase.cpp vulkan/Application.h vulkan/Application.cpp vulkan/FaceApp.h vulkan/FaceApp.cpp vulkan/lodepng.cpp ) find_package(game-activity REQUIRED CONFIG) set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -u Java_com_google_androidgamesdk_GameActivity_initializeNativeCode") find_package(Vulkan REQUIRED) target_link_libraries(sample game-activity::game-activity_static Vulkan::Vulkan android log) endif() if(CMAKE_SYSTEM_NAME STREQUAL "Windows" OR WIN32) message(STATUS "Building for Windows") add_compile_options(/utf-8) add_compile_definitions(_SILENCE_CXX17_CODECVT_HEADER_DEPRECATION_WARNING) include_directories( ${CMAKE_CURRENT_LIST_DIR}/vulkan ${CMAKE_CURRENT_LIST_DIR}/vulkan/framework ${CMAKE_CURRENT_LIST_DIR}/vulkan/components ${CMAKE_CURRENT_LIST_DIR}/vulkan/components/core ${CMAKE_CURRENT_LIST_DIR}/vulkan/components/core/include ${CMAKE_CURRENT_LIST_DIR}/third_party ${CMAKE_CURRENT_LIST_DIR}/third_party/glm ${CMAKE_CURRENT_LIST_DIR}/third_party/vma ${CMAKE_CURRENT_LIST_DIR}/third_party/vma/include ${CMAKE_CURRENT_LIST_DIR}/third_party/fmt ${CMAKE_CURRENT_LIST_DIR}/third_party/fmt/include ${CMAKE_CURRENT_LIST_DIR}/third_party/volk "third_party/glfw-3.4/output/include" "C:/VulkanSDK/1.4.321.1/Include" ) link_libraries( # "${CMAKE_CURRENT_LIST_DIR}/third_party/glfw-3.4/output/lib/glfw3.lib" "${CMAKE_CURRENT_LIST_DIR}/third_party/glfw-3.4/output/glfw3.lib" "C:/VulkanSDK/1.4.321.1/Lib/vulkan-1.lib" ) # 将源代码添加到此项目的可执行文件。 add_executable (sample vulkan/AppBase.h vulkan/AppBase.cpp vulkan/Application.h vulkan/Application.cpp vulkan/FaceApp.h vulkan/FaceApp.cpp vulkan/main.cpp vulkan/lodepng.cpp third_party/vma/src/VmaUsage.h third_party/vma/src/VmaUsage.cpp third_party/fmt/src/format.cc ) endif() # target_compile_definitions(sample PRIVATE VK_NO_PROTOTYPES) 使用volk 动态加载的时候需要定义,不自动生成vulkan接口 target_compile_definitions(sample PRIVATE GLM_ENABLE_EXPERIMENTAL) # target_compile_definitions(sample PRIVATE VULKAN_HPP_NO_STRUCT_CONSTRUCTORS) 解决vs 编译c++ 20 不支持新构造函数的特性